Компиляция DLL с помощью gcc

Что касается деталей того, что dll-hell вы планируете решить, возможно, вам cxx стоит взглянуть на расширяемый cpp синтаксический анализатор, такой dll-hell как lua, вместо того, чтобы dlls создавать свой собственный.

Для dll вашего более конкретного cpp внимания.
Библиотека DLL dll-hell (обычно?) Должна быть завершенной dlls сама по себе или явно знать, какие dll-hell другие библиотеки использовать .dll для завершения самой себя.

Я .dll имею в виду, что у вас не gcc может быть метода, неявно cpp предоставляемого вызывающим dll-hell приложением для выполнения gcc функций DLL.

Однако вы можете gcc сделать частью своего API dll-hell предоставление методов из dlls вызывающего приложения, таким c++ образом сделав DLL полностью cxx включенной, а передачу знаний gcc явной.

Как использовать классы и функции в DLL?
Включите заголовки dynamic-link-library в свой код, когда модуль dynamic-link-library (exe или другая DLL) связан, библиотеки dll-hell DLL проверяются на полноту.

Может ли DLL вызывать функции из связанной с ней программы?
Да, но cxx о них нужно сказать во время dlls выполнения.

Если я создам объект класса {...}; в DLL, то, когда DLL загружается программой, будет ли объект доступен программе?
Да, он будет c++ доступен, однако есть некоторые .dll ограничения, о которых вам dlls нужно знать. Например, в dlls области управления памятью cxx важно:

  • Свяжите все модули, совместно использующие память, с одной и той же dll управления памятью (обычно c runtime)
  • Убедитесь, что память выделена и освобождена только в одном модуле.
  • разместить в стеке

Примеры!
Вот основная dll-hell идея передачи функций в dll, однако cxx в вашем случае это может dll быть не очень полезно, так gcc как вам нужно заранее знать, какие dynamic-link-library еще функции вы хотите предоставить.

// parser.h
struct functions {
  void *fred (int );
};

parse( string, functions );

// program.cpp
parse( "a = sqrt(); fred(a);", functions );

Что .dll вам нужно, так это способ dll регистрации функций (и их dlls деталей в dll). Большая проблема cpp здесь - детализация. Но пропустив dll-hell это, вы можете сделать что-то dynamic-link-library вроде того, что делает wxWidgets dynamic-link-library с регистрацией классов. Когда cpp ваше приложение создает метод dll method_fred, он вызывает dynamic-link-library конструктор и регистрируется dlls в dll с помощью метода off gcc methodInfo. Парсер может cxx искать в methodInfo доступные c++ методы.

// parser.h
class method_base { };
class methodInfo {
   static void register(factory);
   static map m_methods;
}

// program.cpp
class method_fred : public method_base {
   static method* factory(string args);
   static methodInfo _methoinfo;
}
methodInfo method_fred::_methoinfo("fred",method_fred::factory);

c++

dll

gcc

2022-10-02T10:20:42+00:00