Konvertieren von Visual Basic 6.0 in VB.NET 'Structure'

8

BEARBEITEN: Nachdem ich das unter 32-Bit zum Laufen gebracht habe, versuche ich jetzt, es für 64-Bit zu arbeiten. Ich habe Quellcode für die DLL erhalten und DLL und Anwendung werden für 64-Bit kompiliert. Ich erhalte jedes Mal eine Zugriffsverletzung. Hier ist der DLL-Code (C ++ in Visual Studio 2005 ):

%Vor%

Beachten Sie, dass es das Paket auf 2 setzt. Ich habe versucht, es in der Anwendung auf 2 zu setzen, und es schlägt fehl. Ich habe andere Werte ausprobiert, und ich habe sogar Werte ausprobiert, die nicht gleich waren. Ich habe versucht, explizit 4 als Integer-Größe und 8 als doppelte Größe zu verwenden. Aber ich würde (mit begrenzter Kenntnis) davon ausgehen, dass wenn beide Packungsgrößen gleich sind, es funktionieren sollte.

An dieser Stelle vermute ich, wie die Funktion aufgerufen wird. Der erste Parameter ist ein Zeiger auf ein Array dieser Strukturen. Die Anwendung übergibt das erste Element des Arrays ByRef, was ich denke, dass dies erreicht wird. Aber ein schlechter Zeiger auf das Array würde die Symptome erklären. Hier ist die Funktionsdefinition in der DLL.

%Vor%

Mein Chef hat vorgeschlagen, dass es ein Problem mit dem großen / kleinen Endian sein könnte, aber das scheint unwahrscheinlich, wenn sie beide sind in derselben Umgebung kompiliert.

Was soll ich tun?

  
    
      

Ende der Bearbeitung & gt; & gt; & gt;

    
  

Ich konvertiere eine Visual Basic 6.0-Anwendung nach VB.NET. Ich habe ein paar Strukturen, die an externe DLL-Dateien weitergegeben werden. Das funktioniert nicht, und ich habe das Gefühl, dass die Strukturen nicht korrekt weitergeleitet werden.

Hier ist die ursprüngliche Struktur:

%Vor%

Wenn ich eine LenB für eine Variable dieses Typs in Visual Basic 6.0 mache, erhalte ich 84 Bytes. (N .: Ich bin mir nicht sicher, ob das ein gültiger Weg ist, seine Größe zu bestimmen.)

Ich habe versucht, es so in VB.NET umzuwandeln:

%Vor%

In VB.NET System.Runtime.InteropServices.Marshal.sizeof () gibt 88 Bytes. Ich hatte gehofft, da dies nur numerische Werte sind, würde das funktionieren (ich weiß, dass Strings ein Schmerz sein können). Ich habe keinen Code für die externe Funktion, aber es ist so deklariert:

%Vor%

Ich vermute, dass diese Struktur nicht die gleiche Größe hat, so dass der Aufruf der DLL-Datei fehlschlägt, aber ich bekomme keinen Fehler, und wie gesagt, ich habe nicht den Code, um es zu sehen. Es gibt eine Null zurück, wie es sollte, wenn es erfolgreich ist, aber es hat eindeutig keine Wirkung.

Ich habe ein wenig mit Runtime.InteropServices.StructLayoutAttribute , aber wenn das die Antwort ist, kann ich die richtigen Parameter nicht bestimmen.

Ich habe eine andere Struktur wie diese, aber es ist so ähnlich. Ich schätze, wenn ich das beheben kann, werde ich in der Lage sein, das andere zu reparieren.

    
Dan Barron 13.11.2012, 01:46
quelle

2 Antworten

8

Nun, natürlich habe ich als nächstes das Problem behoben. Definieren Sie die Struktur wie folgt:

%Vor%

hat das Problem behoben.

    
Dan Barron 13.11.2012, 01:58
quelle
2

Hier sind gute Ressourcen:

Ihre Konvertierung sieht gut aus, ein long in Visual Basic 6.0 ist 4 Byte, was 32 Bit ist, was eine Ganzzahl in VB.NET ist. Double sind 8 Bytes sowohl in VB.NET und Visual Basic 6.0 (gemäß den obigen Artikeln). Ich bekomme auch 84 Bytes in VB.NET.

%Vor%     
Paul Ishak 11.12.2012 08:44
quelle

Tags und Links