Laden...

Native DLL - String-Argument encoding C# / VB

Letzter Beitrag vor 2 Jahren 3 Posts 669 Views
Native DLL - String-Argument encoding C# / VB

Hallo,

ich habe hier eine Assembly, aus welcher ich eine Methode mit einem String-Argument aufrufe.

In C# nach dem Prinzip:


[DLLImport("AssemblyName.dll")]
public static extern void StartMethod(string filepath);

public void Test()
{
StartMethod(@"C:\Test\test.ini");
}

VB:


Public Declare Auto Sub StartMethod Lib "AssemblyName.dll" (ByVal filepath As String)

Public Sub Test()
StartMethod("C:\Test\test.ini")
End Sub

Beide Aufrufe werden in der DLL ausgeführt, nur bei der C# Variante kommt dann eine Meldung darüber, dass die Datei nicht gefunden wurde und der angezeigte Pfad besteht aus chinesischen Zeichen.

Wenn das in VB funktioniert, wie muss ich denn dann den string in C# umwandeln, dass er identisch zu VB übergeben wird? 🙂 Liegt das evtl. an den Escape-Symbolen (@ -> double escape = no escape), weil es ein Pfad ist?

Du deklarierst bei VB das CharSet als Auto - bei C# nicht. Weil Du es bei C# nicht deklarierst, ist es automatisch Ansi.
https://learn.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.dllimportattribute?view=net-7.0

👍 Danke, werde ich morgen direkt ausprobieren. 🙂