对导入的方法强制执行 stdcall
Force stdcall for imported methods
我正在尝试 link 针对一个带有头文件的 dll。由于没有可用的 *.lib 文件,我通过手动创建一个 *.def 文件来创建一个 (Ref)
现在的问题是,我的测试程序是__cdecl
,dll中的方法是__stdcall
。
有没有办法在特定方法动态 linked 时强制 __stdcall
?
尽管这不是一个选项,但尝试将调用约定 (/Gd
) 更改为 /Gz
,但出现名称修改时说 linker 未能找到稍微损坏的方法如下所示。
LNK2019 unresolved external symbol _TSTInitialize@24 referenced in function
头文件中的函数签名是,
#define TSTPERC_API /*__declspec( dllimport ) __stdcall */
TSTHandle cOpts;
//call native methods
TSTFunctionResult cResult = ::TSTInitialize(
p_strPathToLib.c_str(), p_strConfigStruct.c_str(), p_strLic.c_str(),
p_strRFU1.c_str(), p_strRFU2.c_str(), &cOpts );
好吧,你不会对 .def 或 不正确的方法强制执行 stdcall
.lib 个文件。
本例中的@24
是被调用者需要清理的栈上的字节。所以没有办法将其剥离(如果你这样做,那么被调用者就无法知道要从堆栈中清除多少字节!!)。
真正的问题出在我创建的 *.def 文件上。在我对@hans-passant 的评论中,语法是相反的,
TSTInitialize@24=TSTInitialize
这将使正确的导出符号,_TSTInitialize@24
在lib文件linker
中寻找。这有助于将程序还原为使用 /Gd
而不是 /Gz
我正在尝试 link 针对一个带有头文件的 dll。由于没有可用的 *.lib 文件,我通过手动创建一个 *.def 文件来创建一个 (Ref)
现在的问题是,我的测试程序是__cdecl
,dll中的方法是__stdcall
。
有没有办法在特定方法动态 linked 时强制 __stdcall
?
尽管这不是一个选项,但尝试将调用约定 (/Gd
) 更改为 /Gz
,但出现名称修改时说 linker 未能找到稍微损坏的方法如下所示。
LNK2019 unresolved external symbol _TSTInitialize@24 referenced in function
头文件中的函数签名是,
#define TSTPERC_API /*__declspec( dllimport ) __stdcall */
TSTHandle cOpts;
//call native methods
TSTFunctionResult cResult = ::TSTInitialize(
p_strPathToLib.c_str(), p_strConfigStruct.c_str(), p_strLic.c_str(),
p_strRFU1.c_str(), p_strRFU2.c_str(), &cOpts );
好吧,你不会对 .def 或 不正确的方法强制执行 stdcall
.lib 个文件。
本例中的@24
是被调用者需要清理的栈上的字节。所以没有办法将其剥离(如果你这样做,那么被调用者就无法知道要从堆栈中清除多少字节!!)。
真正的问题出在我创建的 *.def 文件上。在我对@hans-passant 的评论中,语法是相反的,
TSTInitialize@24=TSTInitialize
这将使正确的导出符号,_TSTInitialize@24
在lib文件linker
中寻找。这有助于将程序还原为使用 /Gd
而不是 /Gz