Wickeln Sie die native DLL für C#

Schrieb ich eine C++ DLL und jetzt muss ich anrufen eine systemeigene Funktion, die von einer verwalteten app.

Die exportierte native Funktion erscheint wie diese:

extern "C" __declspec(dllexport) 
bool NativeMethod(char *param1, char *param2, char *result);

So, in der C# - ich rufe die Funktion übergeben 2 input params, 1 Ausgang param und natürlich werde ich Lesen die Rückgabe boolescher Wert.

Habe ich versucht zu wickeln, all dies in vielerlei Hinsicht, aber immer bekomme ich eine PInvokeStackImbalance Ausnahme.
Ich weiß nur einen Weg zu nennen, native Funktion wird durch die Anwendung CallingConvention = CallingConvention.Cdecl) auf .NET-Funktion Erklärung. Aber auf diese Weise bin ich nicht in der Lage zum Lesen der Ausgabe-param (einen leeren string immer) und auch der Rückgabewert ist immer true.

  • was den import haben u versucht?
  • Ich habe versucht, so etwas wie: [DllImport("MyDll", EntryPoint = "NativeMethod")] public static extern Boolean NativeMethod(string param1, string param2, string param3); Auch mit out param3 oder StringBuilder oder MarshalAs(UnmanagedType.LPStr)]
  • Sie erkennen, dass diese output-parameter funktioniert nicht, richtig? C# - strings unveränderlich.
  • [DllImport("MyDll.dll", EntryPoint = "NativeMethod", CallingConvention = CallingConvention.Cdecl)] static extern bool NativeMethod( [MarshalAs(UnmanagedType.LPStr)]string param1, [MarshalAs(UnmanagedType.LPStr)]string param2, [MarshalAs(UnmanagedType.LPStr)]string param3); - chk meine Antwort!
InformationsquelleAutor bit | 2013-02-03
Schreibe einen Kommentar