C ++ DLL은 C#에서 Windows CE에서 호출하여 ARM의 경우 항상 0을 반환합니다.
-
21-08-2019 - |
문제
현재 ARM 프로세서 인 Ti OMAP 프로세서에서 Windows CE 용 응용 프로그램을 개발 중입니다. C#의 C ++ DLL 파일의 함수를 간단히 호출하려고 노력하고 있으며 어떤 데이터 유형을 사용하든 항상 0의 값을 얻습니다. 이것은 아마도 어떤 종류의 전화 컨벤션 불일치 일 것입니까? 동일한 Visual Studio 솔루션에서 DLL과 메인 EXE를 컴파일하고 있습니다.
C# 코드 스 니펫 :
public partial class Form1 : Form
{
private void button1_Click(object sender, EventArgs e)
{
byte test = LibWrap.test_return();
MessageBox.Show(test.ToString());
}
}
public class LibWrap
{
[DllImport("Test_CE.dll")]
public static extern byte test_return();
}
C ++ DLL 코드 스 니펫 :
extern "C" __declspec (dllexport) unsigned char test_return() {
return 95;
}
해결책
변경했을 때 효과가있었습니다.
extern "C" __declspec (dllexport) unsigned char test_return() {
return 95;
}
에게
extern "C" __declspec (dllexport) unsigned char __cdecl test_return() {
return 95;
}
DLL 코드에서. Wince를 위해 편집했을 때 이것을 가정하지 않는 이유는 저를 넘어서는 것입니다.
다른 팁
다음과 같이 test_return ()을 내보내십시오.
unsigned char __declspec(dllexport) WINAPI test_return() {
return 95;
}
winapi 어딘가 __cdecl이어야했던 __stdcall로 정의됩니다.
Winapi는 __stdcall로 정의됩니다.
제휴하지 않습니다 StackOverflow