C ++ DLL دعا من C # على ويندوز CE لARM دوما بإرجاع 0
-
21-08-2019 - |
سؤال
وأنا حاليا على تطوير تطبيق لنظام التشغيل Windows CE على معالج OMAP TI، وهو معالج ARM. أحاول أن مجرد استدعاء دالة في C ++ ملف DLL من C # وأنا دائما الحصول على قيمة 0 إلى الوراء، بغض النظر عن نوع البيانات يمكنني استخدام. هل هذا على الأرجح نوعا من استدعاء عدم تطابق الاتفاقية؟ أنا تجميع DLL وEXE الرئيسي من نفس ستوديو حل Visual.
و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. لماذا لا نفترض أن هذا عندما جمعت لندوز خارج عن ارادتي.
نصائح أخرى
وحاول تصدير test_return () كما يلي:
unsigned char __declspec(dllexport) WINAPI test_return() {
return 95;
}
<اقتباس فقرة>
ويتم تعريفها في مكان ما WINAPI كما __stdcall حيث كان ينبغي أن يكون __cdecl
اقتباس فقرة>ولا. يتم تعريف WINAPI كما __stdcall.
لا تنتمي إلى StackOverflow