1

VisualStudioを使用してC++DLLを作成しています。サンプルのC++関数は

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

次に、次のようにしてRからこの関数を呼び出すことができます。

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

上記のコードは、R64ビットから呼び出された場合に正常に機能します。ただし、DLLを32ビットDLLとしてコンパイルし、R 32ビットから呼び出すと、メッセージボックスが短時間表示された後にクラッシュします。他のプログラムから問題なく関数を呼び出すことができるので、DLLが機能していて、有効な32ビットDLLであることを知っています。R 64ビットが同じ呼び出しを問題なく処理できるのに、なぜR 32ビットがクラッシュするのか知っていますか?

4

1 に答える 1

2

コメントから再投稿:

置換– x64_stdcall__cdeclは単一のユニバーサル呼び出し規約がありますが、x86にはありません。明らかに、間違った規約を使用しています。

于 2012-07-12T21:23:21.377 に答える