C ++ DLL, Вызываемая из C # в Windows CE для ARM, всегда возвращает 0

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

Вопрос

В настоящее время я разрабатываю приложение для Windows CE на процессоре TI OMAP, который является процессором ARM.Я пытаюсь просто вызвать функцию в DLL-файле C ++ из C #, и я всегда получаю обратно значение 0, независимо от того, какой тип данных я использую.Скорее всего, это какое-то несоответствие соглашению о вызовах?Я компилирую DLL и основной EXE-файл из одного и того же решения Visual Studio.

Фрагмент кода на 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 определяется как __stdcall там, где это должно было быть __cdecl

Нет.WINAPI определяется как __stdcall .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top