![]() |
Funktionsaufruf aus einer Headerdatei
Hallo,
ich habe ein Verständnisproblem. Ich habe ein USB-Board, welches ich Delphi mit Hilfe einer DLL und der dazugehörigen Headerdatei ansprechen kann. Nun gibt es vom Hersteller eine neue DLL mit anderen Funktionen, welche ich gern nutzen möchte. Ich stelle die Frage hier, weil der Hersteller bei Supportfragen leider etwas langsam ist. Diese sehen laut Beschreibung meist so aus: Zitat:
Delphi-Quellcode:
SetDefaultGpifParams(True, 12, 16);
Ich weiss leider nicht, wie ich folgende Funktion in Delphi richtig aufrufe. Zitat:
Delphi-Quellcode:
Damit bekomme ich einen Zugriffsverletzung als Fehlermeldung.
var
schreibwort : Word; begin schreibwort := 32; Callback(@schreibwort, 1, True); SetCallBack(CallBack); //Initialisierung des USB-Boards end; |
Re: Funktionsaufruf aus einer Headerdatei
ich würd mal grob in diese Richtung tendieren
Delphi-Quellcode:
type TUsbDataCallbackProc = procedure (pData : pointer; DatLen : DWord; PcToDevice : Boolean); stdcall;
function SetCallBack(CallBack : TUsbDataCallbackProc) : Boolean; stdcall; external ....... procedure MyCallback(pData : pointer; DatLen : DWord; PcToDevice : Boolean); stdcall; begin // mach irgendwas end; SetCallBack(MyCallBack); |
Re: Funktionsaufruf aus einer Headerdatei
also was du geschrieben hast, steht in ähnlicher Form in der Headerdatei, welche ich eingebunden habe.
Delphi-Quellcode:
type
TUsbDataCallbackProc = procedure(pData : pByte; DatLen : DWord; PcToDevice : Boolean); stdcall; function SetCallBack(CallBack : TUsbDataCallbackProc) : Boolean; stdcall; external USB2STREAMDLLNAME |
Re: Funktionsaufruf aus einer Headerdatei
tja, dann brauchst'e nur noch diese Header-Datei einzubinden und deine Callback-Funktion zu übergeben? :angel2:
Delphi-Quellcode:
procedure MyCallback(pData: pByte; DatLen: DWord; PcToDevice: Boolean); stdcall;
begin // mach irgendwas end; SetCallBack(MyCallBack); |
Re: Funktionsaufruf aus einer Headerdatei
wie oben beschrieben, hab ich natürlich die headerdatei eingebunden und bereits wie ebenfalls beschrieben, funktionen aus der headerdatei erfolgreich aufgerufen.
nur mit dieser speziellen bekomm ich's mit meinen zugegebenermaßen bescheidenen delphi-skills nicht hin. |
Re: Funktionsaufruf aus einer Headerdatei
Hi,
Delphi-Quellcode:
Eine Callback-Funktion wird (normalerweise) nicht selbst aufgerufen,
var
schreibwort : Word; begin schreibwort := 32; Callback(@schreibwort, 1, True); SetCallBack(CallBack); //Initialisierung des USB-Boards end; sondern durch eine DLL. Du musst also zuerst der anderen DLL mitteilen, was deine Callback-Funktion ist. Dann rufst du (andere) Funktionen der DLL auf, die sich wiederum bei dir über die Callback-Funktion melden... |
Re: Funktionsaufruf aus einer Headerdatei
jetzt check ich's langsam.
Also die
Delphi-Quellcode:
ist sozusagen, die Callbackfunktion, die durch die DLL aufgerufen wird.
procedure MyCallback(pData: pByte; DatLen: DWord; PcToDevice: Boolean); stdcall;
begin // mach irgendwas end; Und mit dem Befehl
Delphi-Quellcode:
sag ich der DLL also, wie diese aussieht.
SetCallBack(MyCallBack);
In der Funktion selber muss ich dann sozusagen die Werte der Variablen pData: pByte; DatLen: DWord; PcToDevice: Boolean bestimmen. Also:
Delphi-Quellcode:
procedure MyCallback(pData: pByte; DatLen: DWord; PcToDevice: Boolean); stdcall;
begin pData := @Schreib_Daten; DatLen := 1; PcToDevice := True; end; |
Re: Funktionsaufruf aus einer Headerdatei
HI,
Zitat:
Du muss nur beachten, das die Werte keine var-Parameter sind, also nicht an die DLL zurückgegeben werden. In DatLen sagt dir die DLL, wie groß das Array ist, auf das pData zeigt. In PcToDevice sagt dir die DLL, ob du Werte aus dem Array lesen oder in das Array schreiben sollst. Das hier
Delphi-Quellcode:
wird also nicht funktionieren.
procedure MyCallback(pData: pByte; DatLen: DWord; PcToDevice: Boolean); stdcall;
begin pData := @Schreib_Daten; DatLen := 1; PcToDevice := True; end; |
Re: Funktionsaufruf aus einer Headerdatei
hab mir mal die Beschreibung dazu etwas angesehn und es ist eher so:
Delphi-Quellcode:
Procedure MyCallback(pData: PByte; DatLen: DWORD; PcToDevice: Boolean); StdCall;
Begin If PcToDevice Then Begin // von PC zu Device Move(Schreib_Daten, pData^, DatLen); End Else Begin // von Device zu PC Move(pData^, Lese_Daten, DatLen); End; End;
Delphi-Quellcode:
Procedure MyWriteCallback(pData: PByte; DatLen: DWORD; PcToDevice: Boolean); StdCall;
Begin Move(Schreib_Daten, pData^, DatLen); End; SetCallBack(MyWriteCallBack); SetDefaultGpifParams(...); StartStream(True); |
Re: Funktionsaufruf aus einer Headerdatei
Zitat:
|
Re: Funktionsaufruf aus einer Headerdatei
Hab's hinbekommen. Danke für die Hilfe. :dance:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz