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"
:cry:

Verfasst: 01.05.2006 13:29
von Tafkadasom2k5
Hi!
Ich bin kein Visual-Basic Checker, aber ist

Code: Alles auswählen

adresse.w
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

Code: Alles auswählen

adresse.w
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?

Code: Alles auswählen

adresse.w
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:

Code: Alles auswählen

*zeiger.feld
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:

Code: Alles auswählen

ByRef Daten() as Long
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)