Запись нарушения сегмента в переменную в DLL (lcc-win32)
Я построил DLL с несколькими функциями и глобальными переменными. Затем я использовал buildlib для создания библиотеки импорта.
Файл.exp:
CSC_FFSW.dll
_CSC_FFSW_B _CSC_FFSW_B data
_CSC_FFSW_DWork _CSC_FFSW_DWork data
_CSC_FFSW_M _CSC_FFSW_M data
_CSC_FFSW_U _CSC_FFSW_U data
_CSC_FFSW_Y _CSC_FFSW_Y data
_CSC_FFSW_initialize _CSC_FFSW_initialize
_CSC_FFSW_step0 _CSC_FFSW_step0
_CSC_FFSW_step1 _CSC_FFSW_step1
Когда я импортирую DLL из программы, я могу прочитать глобальные переменные (например, CSC_FFSW_U), но когда я пытаюсь записать их, я получаю исключение нарушения сегмента.
Вместо использования библиотеки импорта я попытался вручную импортировать символы из библиотеки DLL, используя:
dllHandle = LoadLibrary("CSC_FFSW.dll");
myType* pCSC_FFSW_U = (myType*)GetProcAddress(dllHandle, "_CSC_FFSW_U");
...
etc.
При таком подходе я могу писать в переменные нормально. Тем не менее, этот метод не так хорош, потому что он требует больше ручной, склонной к ошибкам работы.
Должен ли быть доступ к переменным в библиотеке импорта, созданной buildlib, для чтения и записи? Как мне указать это в файле.exp?
Большое спасибо,
Miguel
1 ответ
Проблема была вызвана отсутствием __declspec(dllimport) и __declspec(dllexport) в объявлении переменных.
См. https://groups.google.com/forum/ для получения дополнительной информации.