Компиляция 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
Компиляция DLL с помощью gcc
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.