DLL Einbinden

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: DLL Einbinden

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: DLL Einbinden

Beitrag von Andreas21 »

Mal auf deinem PC geschaut ob die irgendwo zu finden ist?
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
wfly31
Beiträge: 8
Registriert: 01.10.2015 07:29
Computerausstattung: Lenovo ThinkPad I7, Apple miniMAC, Lenovo Thinkserver
Wohnort: Furtwangen
Kontaktdaten:

Re: DLL Einbinden

Beitrag 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.
Hardware: Mimot Advantage, Mydata TP9, Ekra E1-V, SMT-400C, Dima Breeze, Dima DD500, Emco Compact8, ISEL Miniflat.
Software: PureBasic 5.31, EasyWinArt, Geomagic Design, Pulsonix, Altium, Proteus, CCS Compiler for PIC, CrossStudio for ARM, JumpStarter C for AVR
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: DLL Einbinden

Beitrag 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.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Antworten