Seite 1 von 2
DLL Einbinden
Verfasst: 01.10.2015 08:20
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
Re: DLL Einbinden
Verfasst: 01.10.2015 08:25
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).
Re: DLL Einbinden
Verfasst: 01.10.2015 08:39
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 ?
Re: DLL Einbinden
Verfasst: 01.10.2015 10:42
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.
Re: DLL Einbinden
Verfasst: 01.10.2015 14:50
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
Re: DLL Einbinden
Verfasst: 01.10.2015 15:03
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.

Re: DLL Einbinden
Verfasst: 01.10.2015 17:40
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:
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?
Re: DLL Einbinden
Verfasst: 01.10.2015 20:41
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.
Re: DLL Einbinden
Verfasst: 01.10.2015 22:59
von ts-soft
ImportC und nicht Import!
Re: DLL Einbinden
Verfasst: 02.10.2015 21:51
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.