Purebasic-DLL im Visual-Basic einbinden

Anfängerfragen zum Programmieren mit PureBasic.
horter_de
Beiträge: 1
Registriert: 30.04.2006 11:42

Purebasic-DLL im Visual-Basic einbinden

Beitrag 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:
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag 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?
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag 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)
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Corni
Beiträge: 12
Registriert: 09.01.2006 18:21
Kontaktdaten:

Beitrag 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) 
Antworten