내 Visual Studio를 사용하여 C++ DLL을 만듭니다. 샘플 C++ 기능은 내가 다음 R 64 비트에서 호출 할 때 위의 코드는 잘 작동C++ from R
dyn.load("Path\myDll.dll")
.C("MyFunc","Hello")
다음을 수행하여 R에서이 함수를 호출 할 수 있습니다
void _stdcall MyFunc(char ** strInput)
{
MessageBox(NULL,"Hi from C++", L"C++ program", NULL);
}
입니다. 그러나 DLL을 32 비트 DLL로 컴파일하고 R 32 비트에서 호출하면 메시지 상자가 잠시 표시된 후 충돌이 발생합니다. 나는 내 DLL이 작동하고 다른 프로그램에서 아무 문제없이 그 함수를 호출 할 수 있기 때문에 유효한 32 비트 DLL이라는 것을 알고있다. R 64 비트가 문제없이 동일한 호출을 처리 할 수있을 때 R 32 비트가 충돌하는 이유를 알고 있습니까? 코멘트에서
'_stdcall'을'__cdecl'로 바꾸어보세요. x64는 하나의 보편적 인 호출 규칙을 가지고 있지만 x86은 그렇지 않습니다. – ildjarn
@ildjarn - 그것은 훌륭했고 내 문제를 플래시로 해결했습니다!. 정말 고맙습니다. 자, 해결책을 다시 입력 해 주시면 받아 들일 수 있습니까? –
R이 MinGW로 빌드 될 때 실제로 값을 전송하려고하면 더 심각한 문제가 발생할 것으로 생각됩니다. 모든 기능에 대해 C 언어 래퍼를 통해 얻을 수는 있지만 많은 작업입니다. –