C ++ DLL, Вызываемая из C # в Windows CE для ARM, всегда возвращает 0
-
21-08-2019 - |
Вопрос
В настоящее время я разрабатываю приложение для 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 .