Seite 2 von 2

Re: Die CallCFunction Funktion mit iowkit.dll benutzen.

Verfasst: 24.10.2009 12:52
von H.Brill
Da hätte ich doch mal eine einfache
Frage. Warum gibt mir *Variable 0
zurück ? Die anderen Pointer-Funktionen
(@* und @) geben mir gültige Zeiger
zurück.

Code: Alles auswählen

Global mystr.s

Procedure Tata(sstr.s)
  Debug sstr
  Debug *sstr
  Debug @sstr
  Debug @*sstr
EndProcedure

mystr = "Hallo"
Tata(mystr)
End

Re: Die CallCFunction Funktion mit iowkit.dll benutzen.

Verfasst: 24.10.2009 13:16
von Thorium
Weil der Pointer *sstr 0 ist. sstr und *sstr sind 2 verschiedene Variablen *sstr ist nicht gleich @sstr.
Benutze EnableExplicit und sowas wird dir nicht mehr unbemerkt passieren.

Code: Alles auswählen

EnableExplicit

Global mystr.s

Procedure Tata(sstr.s)
  Debug sstr
  Debug *sstr
  Debug @sstr
  Debug PeekS(@sstr)
  Debug @*sstr
EndProcedure

mystr = "Hallo"
Tata(mystr)
End
Debug @sstr
Debug @*sstr
Geben die richtigen Pointer. @*sstr gibt den Pointer zur neu erstellten Variable *sstr und @sstr den korrekten Pointer zu sstr.

Re: Die CallCFunction Funktion mit iowkit.dll benutzen.

Verfasst: 24.10.2009 16:11
von H.Brill
Danke, gut zu wissen.

Jetzt erhalte ich auch die Fehlermeldung
in Zeile 7 :
Bei EnableExplicit müssen Variablen deklariert werden : *sstr

Re: Die CallCFunction Funktion mit iowkit.dll benutzen.

Verfasst: 25.10.2009 15:12
von PBEDI
Hallo,

durch euch und noch ein Tipp aus dem codemerc Forum habe ich es geschafft und meine Relaiskarte läßt sich nun über buffer2 & buffer3 steuern. Vielen Dank!

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.l, length.l) As "_IowKitRead@16"
  IowKitWrite(devHandle.i, numPipe.l, buffer.l, length.l) As "_IowKitWrite@16"
  IowKitGetProductId(ioHandle) As "_IowKitGetProductId@4"
  IowKitGetRevision(ioHandle) As "_IowKitGetRevision@4"
  IowKitGetSerialNumber(ioHandle, Serial.s) As "_IowKitGetSerialNumber@8"
  IowKitReadImmediate(ioHandle,buffer.s) As "_IowKitReadImmediate@8"
EndImport

IowKitOpenDevice()
ioHandle = IowKitGetDeviceHandle(1) 

numPipe = 0
length = 3

Structure bufferByte
   buffer1.c
   buffer2.c 
   buffer3.c
EndStructure

Define.bufferByte buffer

buffer\buffer1 = 000
buffer\buffer2 = 255
buffer\buffer3 = 255

IowKitWrite(ioHandle, numPipe,buffer,length)
IowKitCloseDevice(iohandle)

End
gruß, Eric

Re: Die CallCFunction Funktion mit iowkit.dll benutzen.

Verfasst: 25.10.2009 15:26
von ts-soft
Die Strukture wird wohl nur im ASCII-Modus funktionieren, falls Du bereits PB 4.40 verwendest würde ich
zu dieser raten:

Code: Alles auswählen

Structure bufferByte
   buffer1.a
   buffer2.a
   buffer3.a
EndStructure
Dann klappts auch mit dem Unicode Nachbarn :wink:

Gruß
Thomas

Re: Die CallCFunction Funktion mit iowkit.dll benutzen.

Verfasst: 25.10.2009 15:47
von PBEDI
Hallo,

habe mir die Beta installiert und die Variable(n) geändert
Jetzt kann ich auch eine Unicode Executable erstellen. Ohne funktioniert nämlich das Auslesen der "IowKitGetSerialNumber" nicht.
Danke

gruß, Eric