Запись нарушения сегмента в переменную в 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/ для получения дополнительной информации.

Другие вопросы по тегам