C ++ DLL은 C#에서 Windows CE에서 호출하여 ARM의 경우 항상 0을 반환합니다.

StackOverflow https://stackoverflow.com/questions/1076955

문제

현재 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로 정의됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top