强制stdcall导入方法

问题描述 投票:-1回答:1

我正在尝试链接一个带有头文件的dll。由于没有可用的* .lib文件,我通过手动创建* .def文件(Ref

制作了一个

现在的问题是,我的测试程序是__cdecl,而dll中的方法是__stdcall。动态链接特定方法时,是否有办法强制使用__stdcall

尽管它不是一个选项,但尝试将调用约定(/Gd)更改为/Gz,但是出现了名称错误的现象,表明链接器无法找到如下所示的稍微错误的方法。

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 );
visual-c++ dllimport dynamic-linking
1个回答
0
投票

好,对于具有错误的[[。def或错误的[[.lib文件的方法,不要强加stdcall

@24在这种情况下是被调用方需要清除的堆栈上的字节。因此,无法将其剥离(如果您这样做,那么被调用者将无法知道要从堆栈中清除多少字节!)。 真正的问题是我创建的* .def文件。在我对@ hans-passant的评论中,语法是另一种方式,

TSTInitialize@24=TSTInitialize

这将在lib文件_TSTInitialize@24中寻找正确的导出符号,linker。这有助于将程序还原为使用/Gd而不是/Gz

© www.soinside.com 2019 - 2024. All rights reserved.