Laden...

Forenbeiträge von DFDotNet Ingesamt 201 Beiträge

30.08.2007 - 09:13 Uhr

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!