Forums Neueste Beiträge
 

Noch einmal C-Dll

26/06/2008 - 16:36 von Patrick Denke | Report spam
Ich habe folgende Funktionsdeklaration in einer C-dll:

bool __stdcall ReadRecord(long DevNum, MCONFIG_READREC* rec);

MCONFIG_READREC ist ein Union, dessen Aufbau mir bekannt ist.
In VB6 mache ich mir ein UDT namens typeReadRec mit derselben Struktur und
deklariere die Funktion folgendermassen:

Declare Function ReadRecord Lib "siosusb.dll" (ByVal DevNumber As Long,
byRef rec As typeReadRec) As Integer

Der Aufruf lautet dann:
Dim rec As typeReadRec, gueltig as Integer
gueltig = ReadRecord(0, rec)

Das funktioniert soweit pràchtig!
Nun gibt es eine àhnliche Funktion mit dem Hinweis "Write only":

bool __stdcall WriteRecord(long DevNum, MCONFIG_WRITEREC rec);

Auch MCONFIG_WRITEREC ist ein Union, dessen Aufbau mir bekannt ist.
In VB6 mache ich mir ein UDT namens typeWriteRec mit derselben Struktur und
deklariere die Funktion nun genauso:

Declare Function WriteRecord Lib "siosusb.dll" (ByVal DevNumber As Long,
byRef rec As typeReadRec) As Integer

Der Aufruf lautet dann:
Dim rec As typeWriteRec, gueltig as Integer
gueltig = WriteRecord(0, rec)

Dieser Aufruf wird mit dem Fehler falsche Dll-Aufrufkonvention quittiert.
Der Unterschied beider Funktions-Deklarationen in C ist der, daß bei der
ersten Funktion ein Sternchen hinter MCONFIG_READREC steht, in der zweiten
aber keines hinter MCONFIG_WRITEREC (daher wohl auch Write Only).

Auf die Dll habe ich leider keinen Einfluss. Daher ist meine Frage, wie
sieht die Funktionsdeklaration und -aufruf für WriteRecord in Visual Basic
aus? ByVal geht bei UDT's leider nicht.

Gruß Patrick
 

Lesen sie die antworten

#1 Schmidt
26/06/2008 - 17:20 | Warnen spam
"Patrick Denke" schrieb im Newsbeitrag
news:kmbejosy1z2k$.bmzfrrx8ayzx$

Declare Function WriteRecord Lib "siosusb.dll" (ByVal DevNumber As Long,
byRef rec As typeReadRec) As Integer

Der Aufruf lautet dann:
Dim rec As typeWriteRec, gueltig as Integer
gueltig = WriteRecord(0, rec)

Dieser Aufruf wird mit dem Fehler falsche Dll-
Aufrufkonvention quittiert.


Im Declare hast Du 'As typeReadRec' definiert,
dann rufst Du das Ganze aber mit einer Variable
vom Typ 'typeWriteRec' auf.

Vielleicht erstmal das anpassen und dann sehen, ob
Du ein Stück weiterkommst.

Olaf

Ähnliche fragen