C#: DllImport Funktion wird aufgerufen, aber nicht gefunden?
-
Moin zusammen,
ich weiss, DllImport wurde schon bis zum Erbrechen diskutiert, aber just diese Sache habe ich wenn überlesen.
Vielleicht kann mir einer von Euch nen Tipp geben:
Also folgendes steht in der Header-Datei der C++-Dll:Blabla.h __declspec(dllexport) int Blabla(void);
Dann habe ich in meinem C# folgendes gemacht:
C#-File: using System; using System.Windows.Forms; using System.Runtime.InteropServices; //DllImport ... ublic class MainForm : System.Windows.Forms.Form { ... [DllImport("BlablaDll.dll", SetLastError=true] public static extern int Blabla(); int call_blabla { int test = Blabla(); MessageBox.Show("Blabla returned: " + test); return test; } }
Lustiger Effekt:
Die Funktion wird eindeutig in der Dll aufgerufen, denn sie macht sichtlich, was sie im Wesentlichen soll - wofür sie auch ne Weile braucht, das kommt ja nun vor.Anschliessend kommt aber nicht die ersehnte MessageBox, sondern eine andere, die mir als Exception meldet, der Einstiegspunkt Blabla sei in der Dll nicht gefunden worden
. Vielleicht ne Timeout-Reaktion?
Wat mache ich (ausser C# verwenden) falsch??
Muss ich ggf. wirklich noch in Managed-C++ nen Wrapper schreiben?Fragenden Gruss,
Qweety.
-
__declspec(dllexport) brauchst du nicht. Mach die Funktion mit
extern "C" {
int Blala();
}sichtbar. Das sollte gehen.
Die meisten C++ Compiler verwenden unsinnige Namenserweiterungen für C-Funktionen. Extern "C" exportiert die Funktion mit ihrem echten C-Namen.