Seite 2 von 2

Re: DLL Einbinden

Verfasst: 02.10.2015 21:58
von ts-soft
Naja, Hauptsache Du hast auch eine Dokumentation zur DLL, weil erraten kann man
die Zahl der Parameter und Ihren Typ nicht!

Ist übrigens nur unter 32-Bit wichtig, ob Import oder ImportC, weil 64-Bit nutzt immer
FastCall als Konvention. Diese DLL nutzt offentsichtlich CDECL, also ImportC!

Eigentlich solltest Du die SerialPort-Lib von PB nutzen können, statt der DLL, weil der eigentliche
Treiber sollte schon geladen sein. Diese DLL nutzt wahrscheinlich nur als Programmierhilfe für
andere Sprachen und ist somit für PB hinfällig.

Die DLL nutzt ASCII-Text, mehr konnte ich nicht rausbekommen, weil ich keine Lust habe, mir
diese zu Installieren (kommt nur als Setup.exe und MSI-Datei).

Viel Erfolg,
Thomas

Re: DLL Einbinden

Verfasst: 04.10.2015 12:56
von Andreas21
Mal auf deinem PC geschaut ob die irgendwo zu finden ist?

Re: DLL Einbinden

Verfasst: 05.10.2015 16:43
von wfly31
Habe nun die 32 Bit-Variante installiert.

Nun ist zumindest der Fehler mit der fehlenden DLL weg.

Habe nun folgenden Code probiert.

Code: Alles auswählen

c.l

; Libname: canusbdrv.lib
; created: 2015/10/05  15:19
ImportC "canusbdrv.lib"
  canusb_Close(handle.i) As "_canusb_Close@4"
  canusb_Open(szID.s, szBitrate.s, _code.l, _mask.l, flags.l) As "_canusb_Open@20"
EndImport

szID.s = "";
szBitrate.s = "0x3:0x1C";
_code.l = $00000000;
_mask.l = $FFFFFFFF;
flags.l = 0;
handle.l

handle = canusb_Open(szID, szBitrate, _code, _mask, flags); 
Debug handle                                              ;

c = canusb_Close(handle)
Debug c; 
Normalerweise müsste doch der Rückgabewert "handle" oder "C" auch in der CANUSBdrv.lib definiert werden.

Kann mir jemand sagen wie ich das schreiben muss ?

Im Moment wird das Handle mit 0 zurückgegeben was ja vermutlich an dem fehlenden Rückgabeparameter liegt.

Re: DLL Einbinden

Verfasst: 11.10.2015 18:32
von GPI
Ich weis jetzt nicht genau was du meinst. Die art des Rückgabewertes kann man so angeben:

Code: Alles auswählen

ImportC "canusbdrv.lib"
  canusb_Close.l(handle.i) As "_canusb_Close@4"
  canusb_Open.l(szID.p-ascii, szBitrate.p-ascii, _code.l, _mask.l, flags.l) As "_canusb_Open@20"
EndImport
Ich hab auch gleichzeitig dein .s durch p-ascii ersetzt. Strings gibt es bei C nicht in der Form wie bei PureBasic, man sollte da immer die Pseudotypes verwenden.