我建立了一个包含一些函数和全局变量的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),但是当我尝试编写它们时,却遇到了Segment Violation异常。

我尝试使用以下方法从DLL手动导入符号,而不是使用导入库:

dllHandle = LoadLibrary("CSC_FFSW.dll");
myType* pCSC_FFSW_U = (myType*)GetProcAddress(dllHandle, "_CSC_FFSW_U");
...
etc.


通过这种方法,我可以将变量写得很好。但是,这种方法不是很好,因为它需要更多的手动操作,容易出错。

是否可以对buildlib创建的导入库中的变量具有读写访问权限?我应该如何在.exp文件中指定?

非常感谢,

米格尔

最佳答案

该问题是由变量声明中缺少__declspec(dllimport)和__declspec(dllexport)引起的。

有关更多详细信息,请参见https://groups.google.com/forum/#!topic/comp.compilers.lcc/FrIyE0HMI04

关于c - 段冲突写入DLL(lcc-win32)中的变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37501207/

10-09 18:20
查看更多