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:
Quelltext
1: 2:
| '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:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| 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:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| 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:
C#-Quelltext
1: 2: 3: 4: 5:
| 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!
Moderiert von Christian S.: Code- durch C#-Tags ersetzt