Я где-то слышал, что все окна .dlls сусла содержит определения для каждого символа он ссылается, поэтому .DLL файл, как это никогда не будет компилировать, так как он не реализует bar()
.компилировать .dll с некоторыми неопределенными ссылками с MinGW
void bar();
__declspec(dllexport)
void foo() {
bar();
}
Я думаю, аналогия, что .dlls, по существу, исполняемый с другой точкой входа, так что они должны все Реферировано определены, как исполняемый файл.
Но в среде Unix я могу скомпилировать это .so-файл без проблем. Затем я могу использовать dlopen(path, RTLD_NOW | RTLD_GLOBAL);
из приложения-хозяина для загрузки библиотеки и объединения символов хоста с библиотекой. Если хост определяет bar()
, библиотека просто вызовет эту функцию.
Я не могу просто переопределить все в файл .DLL, потому что в моем приложении библиотека использует тысячи символов от хоста. Используя MinGW или, возможно, Visual C++, действительно ли нет способа использовать символ из хоста, оставив его неопределенным в .DLL и слиянием его при загрузке? Я также не хочу устанавливать тысячи функций обратного вызова в .DLL, потому что это затрудняет использование C++-методов.
Вы слышали неправильно. Windows DLL может использовать символ из исполняемого файла, который загружает его, хотя это немного необычно. Вы просто экспортируете функцию из исполняемого файла (например, используя '__declspec (dllexport)') и импортируете его в DLL (например, используя '__declspec (dllimport)'). –
... хотя теперь, когда я думаю об этом, я не знаю, поддерживает ли MinGW это. Я не понимаю, почему это не *, но я не знаю. –
Я готов использовать Visual C++, если это необходимо, но я просто счастлив, что это возможно. Я перечитываю, как работает 'dllimport', потому что я, должно быть, неправильно понял что-то в прошлый раз. – Vortico