Dllimport
-
Hallo,
sorry für das neue Thema, aber nach einer Weile des Suchens im Netz bin ich leider noch nicht zu einer funktionierenden Antwort für meine Frage gekommen.
Ich habe eine C#-Anwendung, welche Funktionen einer C++-DLL verwenden soll. Problem hierbei ist, dass die C++-DLL eine Funktion besitzt, welche als Übergabeparameter zwei char* erwartet.
int test(char* str1, char* str2);
Ich möchte gern den einen der beiden char*, welcher in der Funkltion geändert wird, danach in C# weiterverwenden. Im Prinzip brauche ich also eine Möglichkeit, eine Referenz mit hineinzureichen, mit deren geänderten Wert ich danach weiterarbeiten kann.
Verschiedene Versuche mit StringBuilder, IntPtr und was ich sonst noch so suchte sind leider fehlgeschlagen. Einzige Funktionierende Möglichkeit war bisher die Verwendung von "ref string" als Übergabeparameter und die Änderung der DLL-Funktion, sodass diese char** erwartet. Jedoch scheint mir das keine schöne Lösung.Besten Dank.
-
Probiers doch mal mit dem P/Invoke Assistent: http://www.codeplex.com/clrinterop
-
Der gibt mir aus, dass ich IntPtr da reinschicken soll. Leider geht es damit nicht. Gibt es nicht eine andere Möglichkeit?
-
Mit dem StringBuilder gehts, Bsp.:
void f(char* buf, int len) { strcpy_s(buf, len, "test"); }
using System; using System.Text; using System.Runtime.InteropServices; namespace App { internal class Program { [DllImport(@"..\..\..\Debug\Lib.dll")] private extern static void f(StringBuilder buf, int len); private static void Main(string[] args) { StringBuilder sb = new StringBuilder(); sb.EnsureCapacity(10); f(sb, sb.Capacity); } } }
-
Hat wunderbar geklappt! Vielen Dank.