gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:57:53 27 4
gpt4 key购买 nike

我有一个导出函数的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com