DLL Einbinden

Anfängerfragen zum Programmieren mit PureBasic.
wfly31
Beiträge: 8
Registriert: 01.10.2015 07:29
Computerausstattung: Lenovo ThinkPad I7, Apple miniMAC, Lenovo Thinkserver
Wohnort: Furtwangen
Kontaktdaten:

DLL Einbinden

Beitrag von wfly31 »

Hallo erstmal an alle,
ich bin neu hier und in Purebasic ein "Pure"r Anfänger !

Wollte Purebasic nutzen um ein kleines Programm zu schreiben das eine Datei über den CANUSB Adaper an meinen Bootloader im Microcontroller sendet.

Aber nun hängt es mich schon an der Einbindung der CANUSBdrv.dll auf.

Habe erstmal probiert laut Hilfe die DLL mit:

Code: Alles auswählen

If OpenLibrary(0, "canusbdrv.dll")

   ;CallFunction(0, "")
   CloseLibrary(0) 
   Debug "Open"
 Else
   Debug "NotOpen"
 EndIf
zu öffnen und zu schauen ob dies korrekt funktioniert.
Es kommt aber im Debugger immer "NotOpen"

Kann mir jemand von den Pure Profis helfen.

Vielen Dank

Andreas
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 »

Du musst aufpassen, wenn die DLL in 32bit geschrieben ist, muss du auch die 32Bit-Version von PB nutzen.

Anderer Fehler: Wo liegt die DLL? Die sollte in Arbeitsverzeichnis der DLL liegen (getcurrentdirectoy() glaub ich).
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
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 »

PureBasic habe ich in der x64 Version auf dem Rechner installiert.

von der CANUSBdrv.dll habe ich aber nur eine 32 Bit Version.
Ich glaube zumindest daß es eine 32-Bit Version ist.

Es gibt im Verzeichnis Win64 noch eine "canusbdrv64"
Das ist aber keine DLL sondern eine Lib.

Kann diese alternativ auch verwendet werden oder was hat es mit der .LIB auf sich ?
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
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: DLL Einbinden

Beitrag von NicTheQuick »

Ich hab es unter Windows noch nicht ausprobiert, aber .lib müsste man ganz einfach mit Import "canbusdrv64.lib" importieren können. Dann musst du innerhalb "Import" und "EndImport" die Funktionen definieren und schon kannst du sie benutzen.
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 ich auch schon getestet.
Da kommt eine Fehlermeldung beim compilieren dass die canusbdrv64.dll fehlt.

Kann man denn die 32Bit Version von PureBasic paralell mit der 64Bit Version auf dem Rechner installieren?
oder Muss ich da einen zweiten Rechner verwenden.

Hat schon mal jemand das CANUSB Interface mit PureBasic eingebunden ?
http://www.canusb.com
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
Benutzeravatar
mhs
Beiträge: 224
Registriert: 11.01.2009 16:30
Wohnort: Graben
Kontaktdaten:

Re: DLL Einbinden

Beitrag von mhs »

Du kannst nicht nur die 32 und 64bit Version parallel installieren, sondern auch verschiedene Versionen (z.B. 4.61, 5.22 LTS, 5.31, etc).

Dann hast du die Möglichkeit in den Compileroptionen für das jeweilige Projekt die entsprechende Version des Compilers auszuwählen und auch alte Projekte noch komilieren zu können, wenn du bereits eine neuere PB Version installiert hast.

Bild
Michael Hack

Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: DLL Einbinden

Beitrag von NicTheQuick »

wfly31 hat geschrieben:Habe ich auch schon getestet.
Da kommt eine Fehlermeldung beim compilieren dass die canusbdrv64.dll fehlt.
Hast du auch den vollständigen Pfad der Lib angegeben? Oder hast du sie nur im selben Ordner wie dein Quellcode?
Am Ende sollte es ungefähr so aussehen:

Code: Alles auswählen

ImportC "-lcanbusdrv64.lib"
   ;blablabla
EndImport
Ich hab die canbusdrv64.lib jetzt aber nicht auf Anhieb auf der Seite gefunden um das mal selbst zu testen. Wo gibt es die denn?
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 »

@mhs
Danke für die Info. Werde ich probieren.

@NichtheQuick
Mit dem vollständigen Pfad habe ich das auch schon probiert. Ist kein Unterschied.
Habe alle DLL und Lib Dateien testweise in den Programmordner kopiert und mit dem Programm "Lib2PBImport"
aus der DLL bzw. Lib die Importdaten generiert.

Hier fehlen natürlich noch die Variablen.

Code: Alles auswählen

; Libname: canusbdrv64.lib
; created: 2015/10/01  20:39
Import "canusbdrv64.lib"
  CanalBlockingReceive() As "CanalBlockingReceive"
  CanalBlockingSend() As "CanalBlockingSend"
  CanalClose() As "CanalClose"
  CanalDataAvailable() As "CanalDataAvailable"
  CanalGetDllVersion() As "CanalGetDllVersion"
  CanalGetLevel() As "CanalGetLevel"
  CanalGetStatistics() As "CanalGetStatistics"
  CanalGetStatus() As "CanalGetStatus"
  CanalGetVendorString() As "CanalGetVendorString"
  CanalGetVersion() As "CanalGetVersion"
  CanalOpen() As "CanalOpen"
  CanalReceive() As "CanalReceive"
  CanalSend() As "CanalSend"
  CanalSetBaudrate() As "CanalSetBaudrate"
  CanalSetFilter() As "CanalSetFilter"
  CanalSetMask() As "CanalSetMask"
  canusb_Close() As "canusb_Close"
  canusb_Flush() As "canusb_Flush"
  canusb_GetStatistics() As "canusb_GetStatistics"
  canusb_Open() As "canusb_Open"
  canusb_Read() As "canusb_Read"
  canusb_ReadEx() As "canusb_ReadEx"
  canusb_ReadFirst() As "canusb_ReadFirst"
  canusb_ReadFirstEx() As "canusb_ReadFirstEx"
  canusb_SetTimeouts() As "canusb_SetTimeouts"
  canusb_Status() As "canusb_Status"
  canusb_VersionInfo() As "canusb_VersionInfo"
  canusb_Write() As "canusb_Write"
  canusb_WriteEx() As "canusb_WriteEx"
  canusb_getFirstAdapter() As "canusb_getFirstAdapter"
  canusb_getNextAdapter() As "canusb_getNextAdapter"
  canusb_setReceiveCallBack() As "canusb_setReceiveCallBack"
EndImport


Um an die Lib bzw. DLL vom Hersteller zu kommen muss man die Installationsdateien installieren.
Dann befinden sich die DLL bzw. Lib Datei im "LAWICEL" Verzeichnis.

Oder ich kann Sie Dir auch per Mail zusenden.
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
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 »

ImportC und nicht Import!
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
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 »

ImportC hatte ich auch probiert.
Kommt auch die Meldung daß die DLL fehlt.

Werde nun mal versuchen PureBasic in der 32 Bit Version zu Installieren. Da gibt es eine DLL und eine LIB.
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
Antworten