Hallo,
ich habe ein Problem mit einer DLL.
Ich kann eine Methode in der dll aufrufen. diese methode verlangt einen Zeiger auf eine Datenstruktur bestimmter anordnung.
Leider habe ich die Interface-Beschreibung der dll nur für VB6 vorliegen:
'ctrl is a pointer to a structure of type property
Declare Funktion setproperties Lib "dllName.dll" (ctrl as Any)
mit andern Worten: die dll will eine Referenz auf eine Struktur vom typ property.
in VB sieht diese Struktur so aus:
Public Type property
a as long
b as long
c as long
d as long
e as long
f as long
txtLen as Byte
txt as String*100
End Type
in C# habe ich die struktur dann so angelegt:
public struct property
{
public int a;
public int b;
public int c;
public int d;
public int e;
public int f;
public byte txtLen;
public string txt;
}
Die longs sind nun ja ints wegen der 16-Bit-Größe.
Der Aufruf geht so:
//Methode wird vorher per DLLLImport eingebunden und erhält den Namen
// setProperty(ref property prop)
//Property xxx wird vorher initialisiert und werte werden eingetragen...
setProperty(ref xxx);
Der Methodenaufruf funktioniert auch einwandfrei. mit einer weiteren Methode kann ich nachsehen, ob es geklappt hat. die int/long/byte-Werte passen alle. Aber der String stimmt niht.
Ich nehme an, dass das am Aufbau der Strings in VB liegt.
Ich habe einfach angenommen ein c#-string und ein vb-String seien gleich.
Aber wie genau ist ein vb-string aufgebaut?wenn ich das wüsste, könnte ich das ja als byte-array anlegen statt string.
Wäre nett wenn mir da jmnd weiterhelfen könnte.
Danke!