Ich möchte eine Funktion aus einer DLL aufrufen, die wie folgt definiert ist und unter VB6 auch einwandfrei fnktioniert.
So ist sie im Handbuch beschrieben:
Aufruf unter VB6:
Unter VB6 entsprach Long dem INT32, Int dem INT16 und Char war lediglich 1 Byte lang.
Also habe ich die Definition wir folgt angepasst:
Aufgerufen habe ich später
Die Funktion liefert mir eimmer einen Verbungsfehler zurück. Dies deutet dauf hin , dass ich die Parameter nicht richtig übergebe.
Also die Zeiger pAuf_Verbindung sowie pAuf_Adr
Für Hinweise bin ich sehr dankbar
So ist sie im Handbuch beschrieben:
Aufruf unter VB6:
Unter VB6 entsprach Long dem INT32, Int dem INT16 und Char war lediglich 1 Byte lang.
Also habe ich die Definition wir folgt angepasst:
Aufgerufen habe ich später
VB.NET-Quellcode
- Public Structure CON_TABLE_TYPE
- Public adr1 As Byte ' Verbindungsadresse
- Public adr2 As Byte ' Verbindungsadresse
- Public adr3 As Byte ' Verbindungsadresse
- Public adr4 As Byte ' Verbindungsadresse
- Public adr5 As Byte ' Verbindungsadresse
- Public adr6 As Byte ' Verbindungsadresse
- Public AdrType As Byte ' Typ der Adresse MPI(1) IP(2) MAC(3)
- Public SlotNr As Byte ' Slot-Nummer
- Public RackNr As Byte ' Rack-Nummer
- End Structure
- dim adr As CON_TABLE_TYPE
- ....
- Dim adr_lg As UInt32 = System.Runtime.InteropServices.Marshal.SizeOf(adr)
- ' Nullterminierter String "S7ONLINE"
- Dim verbindung() As Byte = _
- {Convert.ToByte("S"c), _
- Convert.ToByte("7"c), _
- Convert.ToByte("O"c), _
- Convert.ToByte("N"c), _
- Convert.ToByte("L"c), _
- Convert.ToByte("I"c), _
- Convert.ToByte("N"c), _
- Convert.ToByte("E"c), _
- 0}
- ' Pointer auf die Verbindungsadresse erstellen
- Dim pAuf_Adr As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(adr))
- Marshal.StructureToPtr(adr, pAuf_Adr, False)
- ' Pointer auf den Verbindungsnamen erstellen
- Dim pAuf_Verbindung As IntPtr = Marshal.AllocCoTaskMem(9)
- Marshal.StructureToPtr(verbindung(0), pAuf_Verbindung, False)
- ' Funktionsaufruf
- ret_ex6 = LoadConnection_ex6(nr, pAuf_Verbindung, adr_lg, pAuf_Adr)
Die Funktion liefert mir eimmer einen Verbungsfehler zurück. Dies deutet dauf hin , dass ich die Parameter nicht richtig übergebe.
Also die Zeiger pAuf_Verbindung sowie pAuf_Adr
Für Hinweise bin ich sehr dankbar