Die CallCFunction Funktion mit iowkit.dll benutzen.

Anfängerfragen zum Programmieren mit PureBasic.
PBEDI
Beiträge: 4
Registriert: 22.10.2009 19:57
Wohnort: Berlin

Die CallCFunction Funktion mit iowkit.dll benutzen.

Beitrag von PBEDI »

Hallo,

ich versuche vergeblich meine 10 Kanal USB Relaiskarte mit den IOW24 chip anzusteuern.

Code: Alles auswählen

Enumeration
#Library
EndEnumeration

io.l = OpenLibrary(#Library , "iowkit.dll")
If io = 0
  MessageRequester("Fehler","Konnte DLL nicht laden")
  End
EndIf

CallCFunction(#Library, "IowKitOpenDevice")
ioHandle.l = CallCFunction(#Library, "IowKitGetDeviceHandle",1)
If ioHandle = 0
  MessageRequester("Fehler","Keine Karte gefunden")
  End
EndIf

CallCFunction(#Library,"IowKitWrite",ioHandle, "0111111111",0,3)

Delay(3000)

CallCFunction(#Library, "IowKitCloseDevice",ioHandle)
CloseLibrary(#Library)
Die Karte wird gefunden, aber ich bekomme keinen IowKitWrite hin.
Kann mir dabei bitte einer weiterhelfen.

gruß, Eric
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: Die CallCFunction Funktion mit iowkit.dll benutzen.

Beitrag von ts-soft »

Vielleicht suchste mal ein paar links zur Doku und falls legal zum Download der DLL?

Hab ein Datenblatt für Version 1.5 gefunden, demnach ist es eine StdCall DLL, also ist CallCFunction
schon mal verkehrt (wahrscheinlich), desweiteren sollte man sowieso Prototypes für sowas nutzen!

Wie gesagt, ein Link zur Doku o. ä. die auch die C-API enthält und evtl. zur DLL und dann kann Dir wahrscheinlich
eher jemand helfen (falls nicht zufällig jemand diesele Relaiskarte verwendet).

Gruß
Thomas

// Nachtrag:
Die parameter in IowKitWrite scheinen nicht zu stimmen, lt. Datenblatt sollte es so aussehen:

Code: Alles auswählen

Prototype IowKitWrite(devHandle.i, numPipe.l, lpbuffer.s, length.l)
Crawler
Beiträge: 110
Registriert: 08.02.2009 19:52
Computerausstattung: PB 4.41
Win7 64bit

Re: Die CallCFunction Funktion mit iowkit.dll benutzen.

Beitrag von Crawler »

Unter http://www.codemercs.com findet man dieses Dokument. Ich habe mich auch daran versucht, bin allerdings mit meinen lowlevel-Programmierfähigkeiten gescheitert. Von daher möchte ich das Thema natürlich ausführlich erklärt bekommen. ;)

[edit] @ts-soft: Kannst dir ja schnell einen der IOWarrior bei Segor in Berlin holen, die liegen da an der Halbleitertheke. Sind schon interessante ICs.
PB 4.41 | Win7 64bit
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: Die CallCFunction Funktion mit iowkit.dll benutzen.

Beitrag von ts-soft »

Crawler hat geschrieben:Unter http://www.codemercs.com findet man dieses Dokument. Ich habe mich auch daran versucht, bin allerdings mit meinen lowlevel-Programmierfähigkeiten gescheitert. Von daher möchte ich das Thema natürlich ausführlich erklärt bekommen. ;)
Selbst erarbeiten ist angesagt :mrgreen:
Crawler hat geschrieben: [edit] @ts-soft: Kannst dir ja schnell einen der IOWarrior bei Segor in Berlin holen, die liegen da an der Halbleitertheke. Sind schon interessante ICs.
Erstmal ist Segor viel zu teuer und zweitens hab ich kein Geld für so einen tünnif :lol:

Lad Dir mal auf der von Dir geposteten Seite das "Windows_SDK_01.zip"
Anhand der iowkit.h definierste die Konstanten und Structuren. Dann importierste die iowkit.lib und das wars.
Allerdings werde ich da jetzt nicht meine Zeit drauf verwenden.

Ein kleiner Anfang:

Code: Alles auswählen

Import "iowkit.lib"
  IowKitOpenDevice() As "_IowKitOpenDevice@0"
  IowKitCloseDevice(devHandle.i) As "_IowKitCloseDevice@4"
  IowKitRead(devHandle.i, numPipe.l, buffer.p-ascii, length.l) As "_IowKitRead@16"
  IowKitWrite(devHandle.i, numPipe.l, buffer.p-ascii, length.l) As "_IowKitWrite@16"
  ; ...
EndImport
Viel Spaß beim probieren und lernen,

Thomas
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Die CallCFunction Funktion mit iowkit.dll benutzen.

Beitrag von edel »

Das Ganze laeuft tatsaechlich mit stdcall und nicht mit cdecl. Also CallFunction und nicht CallCFunction nutzen.
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: Die CallCFunction Funktion mit iowkit.dll benutzen.

Beitrag von ts-soft »

Im Header ist es nicht so deutlich, ich nehme mal an, die haben die Linux und Windows-Header gemischt :mrgreen:
Java objekte sind da auch noch in der Lib, hab die aber nicht in der Doku gesehen.
Ist eben ein SDK für Mac, Lin und Win, sowie java
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Die CallCFunction Funktion mit iowkit.dll benutzen.

Beitrag von edel »

Im Header steht ganz klar das es sich unter Windows um stdcall handelt.
PBEDI
Beiträge: 4
Registriert: 22.10.2009 19:57
Wohnort: Berlin

Re: Die CallCFunction Funktion mit iowkit.dll benutzen.

Beitrag von PBEDI »

Hallo,

mit dem Import der iowkit.lib funktioniert jetz auch das Auslesen der SerialNumber. Danke
Aber ich komme mit der Variable lpbuffer.s nicht klar. Laut Anleitung muss diese in PChar sein. Damit kenne ich mich nicht aus. Wenn ich diese leer lasse, werden jetzt die Relays 2 bis 9 geschaltet.

Code: Alles auswählen

Import "iowkit.lib"
  IowKitOpenDevice() As "_IowKitOpenDevice@0"
  IowKitCloseDevice(devHandle.i) As "_IowKitCloseDevice@4"
  IowKitGetNumDevs() As "_IowKitGetNumDevs@4"
  IowKitGetDeviceHandle(devHandle.i) As "_IowKitGetDeviceHandle@4"
  IowKitRead(devHandle.i, numPipe.l, buffer.p-ascii, length.l) As "_IowKitRead@16"
  IowKitWrite(devHandle.i, numPipe.l, buffer.p-ascii, length.l) As "_IowKitWrite@16"
  IowKitGetProductId(ioHandle) As "_IowKitGetProductId@4"
  IowKitGetRevision(ioHandle) As "_IowKitGetRevision@4"
  IowKitGetSerialNumber(ioHandle, buffer.s) As "_IowKitGetSerialNumber@8"
EndImport

length.l = 3 ; bei den IOW24 muss hier der Wert 3 sein
Serial.s = ""
numPipe.l = 0 
lpbuffer.s = ""

IowKitOpenDevice()
ioHandle.i = IowKitGetDeviceHandle(1) 
PID.i = IowKitGetProductId(ioHandle.i)
Revision.i = IowKitGetRevision(ioHandle.i) 
IowKitGetSerialNumber(ioHandle.i, Serial.s) 

IowKitWrite(ioHandle.i, numPipe.l, lpbuffer.s, length.l)

Delay(3000)

Debug IowKitCloseDevice(iohandle)

gruß, Eric
Benutzeravatar
H.Brill
Beiträge: 497
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Die CallCFunction Funktion mit iowkit.dll benutzen.

Beitrag von H.Brill »

Hallo,
wundert mich sowieso, daß es mit einfacher
Stringübergabe geht. Meistens erwarten die
Funktionen einen Zeiger auf den String.

probiere es mal so :

Code: Alles auswählen

; Funktion definieren
DLLfunction(meinstring.l)
; und dann beim Aufruf :
mystr.s = "irgendwas"
DLLfunction(@mystr)
PB 6.10
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Die CallCFunction Funktion mit iowkit.dll benutzen.

Beitrag von edel »

das ist voellig egal, da immer der Zeiger eines Strings uebergeben wird.
Antworten