1

我正在使用 Visual Studio 创建我的 C++ DLLS。一个示例 C++ 函数是

void _stdcall MyFunc(char ** strInput)
{
   MessageBox(NULL,"Hi from C++", L"C++ program", NULL);
}

然后我可以通过执行以下操作从 R 调用此函数

dyn.load("Path\myDll.dll")
.C("MyFunc","Hello")

当从 R 64 位调用时,上面的代码工作正常。但是,当我将我的 DLL 编译为 32 位 DLL 并从 R 32 位调用它时,它会在短暂显示消息框后崩溃。我知道我的 DLL 正在工作并且是一个有效的 32 位 DLL,因为我可以毫无问题地从其他程序调用它的函数。你知道为什么当 R 64 位可以毫无问题地处理同一个调用时,为什么 R 32 位会崩溃吗?

4

1 回答 1

2

从评论转贴:

Replace _stdcallwith __cdecl– x64 有一个单一的通用调用约定,但 x86 没有,而且您显然使用了错误的约定。

于 2012-07-12T21:23:21.377 回答