Ich muss auf dynamische Bibliothek mit C# zugreifen. Es funktioniert gut bei der Verwendung der COM-Bibliothek, aber wenn ich versuche, dynamische Bibliothek verwenden, verursacht es einen Fehler.C# - Funktion aus dynamischer Bibliothek aufrufen dll
erste Problem
Zuerst ich tue mein Code wie folgt:
[DllImport("mydll.dll")]
public static extern int toGetInfo(uint id, char[] strVolume, char[] strInfo);
// strVolume and strInfo is parameter that return value with [out]
public static void Main()
{
char[] test1,test2;
toGetInfo(0,test1,test2);
}
Aber es nicht mehr mit Fehler Verwendung der nicht zugewiesenen lokalen Variablen für test1 und test2 kompilieren. Dann habe ich meinen Code bearbeiten, indem aus wie folgt ergänzt:
[DllImport("mydll.dll")]
public static extern int toGetInfo(uint id, out char[] strVolume, out char[] strInfo);
// strVolume and strInfo is parameter that return [out]
public static void Main()
{
char[] test1,test2;
toGetInfo(0, out test1, out test2);
}
Es kann zu kompilieren, aber gibt Nullwert Test1 und Test2.
zweites Problem
[DllImport("mydll.dll")]
public static extern int toOpen(uint id, char* name);
public static void Main()
{
char name;
toOpen(0, name);
}
Wenn kompilieren geben Fehler „Pointers und feste Größe Puffer nur in einem unsicheren Kontext verwendet werden können“
Jede Idee, wie es zu tun?
Ein Zeichen ist zwei Bytes in C# und in c es ist wahrscheinlich ein. Verwenden Sie in C# ein Byte []. In c sind die Zeichenarrays mit '\ 0' abgeschlossen, daher ist es am besten, IntPtr Marshal.StringToHGlobalAnsi (string) zu verwenden, das alle Aufgaben automatisch erledigt. Also deklariere char [] als IntPtr. – jdweng
nach dem Wechsel zu intPtr gibt es etwas. Warte ich werde updaten – njz