Seite 1 von 2
Die CallCFunction Funktion mit iowkit.dll benutzen.
Verfasst: 22.10.2009 20:37
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
Re: Die CallCFunction Funktion mit iowkit.dll benutzen.
Verfasst: 22.10.2009 21:05
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)
Re: Die CallCFunction Funktion mit iowkit.dll benutzen.
Verfasst: 23.10.2009 15:01
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.
Re: Die CallCFunction Funktion mit iowkit.dll benutzen.
Verfasst: 23.10.2009 15:27
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
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
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
Re: Die CallCFunction Funktion mit iowkit.dll benutzen.
Verfasst: 23.10.2009 15:32
von edel
Das Ganze laeuft tatsaechlich mit stdcall und nicht mit cdecl. Also CallFunction und nicht CallCFunction nutzen.
Re: Die CallCFunction Funktion mit iowkit.dll benutzen.
Verfasst: 23.10.2009 15:39
von ts-soft
Im Header ist es nicht so deutlich, ich nehme mal an, die haben die Linux und Windows-Header gemischt
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
Re: Die CallCFunction Funktion mit iowkit.dll benutzen.
Verfasst: 23.10.2009 16:39
von edel
Im Header steht ganz klar das es sich unter Windows um stdcall handelt.
Re: Die CallCFunction Funktion mit iowkit.dll benutzen.
Verfasst: 24.10.2009 00:21
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
Re: Die CallCFunction Funktion mit iowkit.dll benutzen.
Verfasst: 24.10.2009 07:53
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)
Re: Die CallCFunction Funktion mit iowkit.dll benutzen.
Verfasst: 24.10.2009 09:04
von edel
das ist voellig egal, da immer der Zeiger eines Strings uebergeben wird.