Forum: PC-Programmierung Visual Basic 6.0 Problem beim .dll zugriff


von Matze D. (matze0304)


Lesenswert?

Hallo Liebe VB6 Experten,

ich habe probleme beim aufrufen der folgenden dll Funktionen in VB6

1.
DlnOpenUsbDevice()

Beschreibung der Function
    C/C++

DLN_RESULT DlnOpenUsbDevice(
   HDLN* deviceHandle
);

2.
DlnI2cMasterSetFrequency()

Beschreibung:
DLN_RESULT DlnI2cMasterSetFrequency(
   HDLN handle,
   uint8_t port,
   uint32_t frequency,
   uint32_t* actualFrequency
);

Hier meine Declaration für 1.:

Private Declare Function DlnOpenUsbDevice Lib "C:\dln.dll" (ByVal 
deviceHandle As Long) As Byte

Beim Aufruf in VB6:
DlnOpenUsbDevice(devicehandle)

kommt immer Fehler Variable nicht definiert und Programm stürzt ab.

Was mache ich falsch?

von Peter II (Gast)


Lesenswert?

Matze D. schrieb:
> Private Declare Function DlnOpenUsbDevice Lib "C:\dln.dll" (ByVal
> deviceHandle As Long) As Byte

ich vermute mal das byVal falsch ist, es wird ein zeiger gebraucht als 
auf jeden Fall ByRef.

von Matze D. (matze0304)


Lesenswert?

Danke für den Hinweis.

Jetzt bekomme ich die Meldung: Falsche DLL-Aufrufkonvention (Fehler 49)

von Mike (Gast)


Lesenswert?

1.) Ist die DLL korrekt registriert (Regsvr32)
    >%systemroot%\SysWoW64\regsvr32 <vollständiger Pfad der DLL>

Public Declare Function DlnI2cMasterSetFrequency Lib "dln.dll" (ByVal 
deviceHandle As Long) As Byte


..stimmt nicht mit der Parameterliste der C-Funktion überein:

DLN_RESULT DlnI2cMasterSetFrequency(
   HDLN handle,
   uint8_t port,
   uint32_t frequency,
   uint32_t* actualFrequency
);

von Peter II (Gast)


Lesenswert?

Mike schrieb:
> Ist die DLL korrekt registriert (Regsvr32)

warum sollte die dll registert werden müssen, es ist kein aktivX.


>..stimmt nicht mit der Parameterliste der C-Funktion überein:
ja, vermutlich

Er schreibt ja die Aufrufkonvention stimmt nicht.

https://stackoverflow.com/questions/6309237/how-would-you-declare-dll-import-signature

man müsste etwas mehr über die dll wissen.

von Christian M. (Gast)


Lesenswert?

Laut:

http://dlnware.com/sites/dlnware.com/files/downloads/dln_c_api.pdf
(ist doch diese DLL?!)

auf Seite 11 ist die Aufruf-Konvention für C/C++, das heisst "cdecl". 
Default ist unter Windows "stdcall". Kannst Du die Call-Convention 
irgendwie umstellen (anständige Programmiersprachen sollten das können).

Sei froh, dass eine Fehlermeldung kommt, sonst würde das ganze System 
crashen! Der Stack wird sonst nicht richtig aufgeräumt!

Ich habe mir wegen diesem Problem für die "mpusbapi.dll" eine 
Wrapper-DLL geschrieben.

Gruss Chregu

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.