c++ - 加载库Ex : Parameters get lost in 64bit

标签 c++ 64-bit dllexport

我有一个导出函数的 64 位 DLL

 __cdecl int (*function)(IN wchar_t* file, OUT VARIANT &htmlFile, IN wchar_t* path);

实现为

int CShellWrapperx64Module:function(wchar_t* file, VARIANT &htmlFile, wchar_t* path) {
    VariantInit(&htmlFile);
    htmlFile.vt = VT_BSTR;
    htmlFile.bstrVal = ::SysAllocString(L"");
    return 0;
}

和调用该函数的 64 位 DLL

 function pfunction = (function)GetProcAddress(hMod, MAKEINTRESOURCEA(0x0001));
 TCHAR m_file[MAX_PATH];
 VARIANT vhtml;
 VariantInit(&vhtml);
 pfunction(m_file, vhtml, path);

在 32 位模式下函数调用成功,但在 64 位模式下到达函数入口点但参数无效?我能做什么?

最佳答案

您将其声明为静态函数,但它实际上是实例方法的可能性很大。它在 x86 上工作是偶然的,因为 this 指针是在寄存器中传递的,而不是在堆栈中传递的。你在 x64 上运气不佳,因为它以不同的方式传递参数。一切都在寄存器中传递,现在调用者和被调用者不再匹配。否则链接器无法在构建时帮助您诊断此问题,因为您使用了 GetProcAddress。

声明方法静态

关于c++ - 加载库Ex : Parameters get lost in 64bit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7042596/

相关文章:

C++ STL 集 : Compare object with extrinsic state

c++ - GTK+上的中小型开源项目示例

c++ - 如何向我的程序添加描述(-> 任务管理器中的描述列)(VS 2008,C++)

c++ - 如何从 Visual Studio 2017 社区版 C++ 项目导出 DLL?

c++ - 如何从 DLL 导出中删除下划线

c++ - 包装类的完美转发

c# - 最重要的设置位剩下的未设置位的数量?

python - 从 python 32 位到 python 64 位

windows - windows中将64位地址截断为32位地址时,为什么要保证高33位为0,高32位不为0?

c++ - 笨拙的 DLL 导出部分