Die CallCFunction Funktion mit iowkit.dll benutzen.

Anfängerfragen zum Programmieren mit PureBasic.
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 »

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
PB 6.10
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: Die CallCFunction Funktion mit iowkit.dll benutzen.

Beitrag 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.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
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 »

Danke, gut zu wissen.

Jetzt erhalte ich auch die Fehlermeldung
in Zeile 7 :
Bei EnableExplicit müssen Variablen deklariert werden : *sstr
PB 6.10
PBEDI
Beiträge: 4
Registriert: 22.10.2009 19:57
Wohnort: Berlin

Re: Die CallCFunction Funktion mit iowkit.dll benutzen.

Beitrag 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
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 »

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
PBEDI
Beiträge: 4
Registriert: 22.10.2009 19:57
Wohnort: Berlin

Re: Die CallCFunction Funktion mit iowkit.dll benutzen.

Beitrag 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
Antworten