【问题标题】:Segment violation writing to variable in DLL (lcc-win32)段冲突写入 DLL 中的变量(lcc-win32)
【发布时间】:2016-05-28 16:12:00
【问题描述】:

我已经构建了一个包含一些函数和全局变量的 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 文件中指定这个?

非常感谢,

米格尔

【问题讨论】:

    标签: c dll lcc-win32


    【解决方案1】:

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

    更多详情请见https://groups.google.com/forum/#!topic/comp.compilers.lcc/FrIyE0HMI04。

    【讨论】:

    • 当然可以,这很受欢迎。您可能不会因此获得任何声誉点数.... ;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-20
    • 1970-01-01
    • 2016-09-05
    • 2017-11-03
    相关资源
    最近更新 更多