Seite 1 von 1
Purebasic-DLL im Visual-Basic einbinden
Verfasst: 30.04.2006 11:50
von horter_de
Hallo Forum,
ein Freund hat mir eine DLL in Purebasic geschreiben, die Daten auf die serielle Schnittstelle schreibt.
In der DLL ist ein Zeiger programmiert, der ein Feld von 16 Worten definiert
Code: Alles auswählen
ProcedureDLL.w I2C_Write(adresse.w, *zeiger.feld, anzahl.w) ...
Wie muß ich in Visual Basic die Funktion deklarieren, damit ich die Daten lesen / schreiben kann
Code: Alles auswählen
Declare Function I2C_Write Lib "I2C_Port.dll" (ByVal Adresse As Integer, ByRef Daten, ByVal Anzahl As Integer)
geht nicht. Ich bekomme immer die Meldung "Falsche DLL Aufrufkonvention"

Verfasst: 01.05.2006 13:29
von Tafkadasom2k5
Hi!
Ich bin kein Visual-Basic Checker, aber ist
in PureBasic nicht ein "Word"?
Du übergibst in deinem VB-Code aber einen Integerwert.
Vielleicht liegt da der Hund begraben?
Gr33tz
Tafkadasom2k5
P.S.:
Was bedeuten die Parameter "ByRef", "ByCopy" oder "ByValue"?
Die sind mir auch n PowerBasic schon oft über den Weg gelaufen, aber mit "ByVal" bin ich bisher gut gefahren...
Wozu die anderen Parameter?
Verfasst: 01.05.2006 14:09
von Thorium
Tafkadasom2k5 hat geschrieben:Hi!
Ich bin kein Visual-Basic Checker, aber ist
in PureBasic nicht ein "Word"?
Du übergibst in deinem VB-Code aber einen Integerwert.
Vielleicht liegt da der Hund begraben?
Gr33tz
Tafkadasom2k5
P.S.:
Was bedeuten die Parameter "ByRef", "ByCopy" oder "ByValue"?
Die sind mir auch n PowerBasic schon oft über den Weg gelaufen, aber mit "ByVal" bin ich bisher gut gefahren...
Wozu die anderen Parameter?
Ist schon richtig, da VB-Integer = PB-Word.
ByRef = Es wird ein Pointer zu dem Parameter übergeben, das ermöglicht der DLL-Funktion die Daten zu verändern ohne sie explizit zurückgeben zu müssen.
ByVal = Der Wert des Parameters wird kopiert und dann übergeben, das heißt der Originalparameter wird von der DLL-Funktion nicht angetastet.
Leider bin ich noch PB-Noob und weiß nicht was das zu bedeuten hat:
Aber ich gehe stark davon aus das bei der übergabe dieses Parameters der Fehler liegt, da du ihn in VB als Variant übergibst. Also wenn *zeiger.feld ein Array aus Zeigern ist, müsstest du "Daten" so übergeben:
dabei müsstest du allerdings wissen wieviele Elemente das Feld enthält.
Code: Alles auswählen
Declare Function I2C_Write Lib "I2C_Port.dll" (ByVal Adresse As Integer, ByRef Daten(Anzahl) As Long, ByVal Anzahl As Integer)
Verfasst: 04.05.2006 18:00
von Corni
nimm halt in vb Variant her
Code: Alles auswählen
Declare Function I2C_Write Lib "I2C_Port.dll" (ByVal Adresse As Variant, ByRef Daten(Anzahl) As Long, ByVal Anzahl As Variant)