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 :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

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 :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

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.