Я портирую программу на MS Windows. Эта программа использует динамически загружаемые плагины. Плагины ссылаются на символы в основной программе. Я даже не могу получить DLL мимо компоновщика без разрешения всех символов. Есть ли способ решить это?DLL Получить символы со своего родителя (Loader)
0
A
ответ
1
(К сожалению, я хотел бы попросить разъяснения в комментариях, но я слишком много новичков, чтобы иметь возможность.)
Когда вы говорите, плагины «ссылочные символы в основной программе», это о ссылках на функции или данные? Кроме того, какой язык/компилятор вы используете?
Предполагая, что это касается только функций, а в C/C++: можно экспортировать функцию из .EXE, как если бы это была DLL. Просто укажите __declspec (dllexport) перед определением функции в .EXE. При компиляции файла .EXE должен генерироваться файл .LIB, который затем можно использовать в качестве ввода при связывании каждого плагина.
Если я правильно понимаю, вы предлагаете ссылку на статическую библиотечную версию программы. Это хорошая идея получить копии функций, но это не сработает, если функции ссылаются на глобальные переменные (включая статику), потому что они будут ссылаться на другую копию переменной. На самом деле я просто предполагаю, что это не сработает. – Rubinium
Нет, на самом деле. Библиотека экспорта - это .LIB, которая полезна для компоновщика при настройке динамических вызовов. Когда вы вызываете функцию, о которой идет речь, она по-прежнему вызывает DLL (или в этом случае EXE). –