AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Funktionsaufruf aus einer Headerdatei

Ein Thema von oli_a · begonnen am 10. Feb 2009 · letzter Beitrag vom 11. Feb 2009
Antwort Antwort
Seite 1 von 2  1 2      
oli_a

Registriert seit: 10. Jul 2008
29 Beiträge
 
#1

Funktionsaufruf aus einer Headerdatei

  Alt 10. Feb 2009, 14:53
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:
function SetDefaultGpifParams(MHz48 : Boolean; Divider : Byte; BitWidth : Byte) : Boolean; stdcall;
Dies ruft man einfach mit den gewünschten Parametern auf und fertig. Bsp.:
SetDefaultGpifParams(True, 12, 16);
Ich weiss leider nicht, wie ich folgende Funktion in Delphi richtig aufrufe.
Zitat:
function SetCallBack(CallBack : TUsbDataCallbackProc) : Boolean; stdcall;

Set a callback function. Calling this function before starting streaming action is mandatory. The callback function needs to have the following signature:

procedure Callbackname(pData : pointer; DatLen : DWord; PcToDevice : Boolean); stdcall;

The callback function receives 3 parameters when beeing called:
pData: Pointer to a data array that needs to be read or written depending on stream direction. This can either be a Byte pointer (when Bitwidth = 8) or a Word pointer (when Bitwidth = 16)
DatLen (indicates how many bytes need to be read or written.
IMPORTANT: When streaming is stopped due to an error or on user-request the callback function gets called one time with the parameter DatLen set to zero).
PcToDevice: Depending of the stream direction that you specified when executing the StartStream function, this value will be set to true (Data transfer from computer to usb device) or false (Data transfer from usb device to computer).
Ich habe es so probiert:
Delphi-Quellcode:
var
schreibwort : Word;
begin
schreibwort := 32;
Callback(@schreibwort, 1, True);
SetCallBack(CallBack); //Initialisierung des USB-Boards
end;
Damit bekomme ich einen Zugriffsverletzung als Fehlermeldung.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: Funktionsaufruf aus einer Headerdatei

  Alt 10. Feb 2009, 15:03
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);
$2B or not $2B
  Mit Zitat antworten Zitat
oli_a

Registriert seit: 10. Jul 2008
29 Beiträge
 
#3

Re: Funktionsaufruf aus einer Headerdatei

  Alt 10. Feb 2009, 15:17
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

Re: Funktionsaufruf aus einer Headerdatei

  Alt 10. Feb 2009, 15:36
tja, dann brauchst'e nur noch diese Header-Datei einzubinden und deine Callback-Funktion zu übergeben?
Delphi-Quellcode:
procedure MyCallback(pData: pByte; DatLen: DWord; PcToDevice: Boolean); stdcall;
  begin
    // mach irgendwas
  end;

SetCallBack(MyCallBack);
$2B or not $2B
  Mit Zitat antworten Zitat
oli_a

Registriert seit: 10. Jul 2008
29 Beiträge
 
#5

Re: Funktionsaufruf aus einer Headerdatei

  Alt 10. Feb 2009, 15:52
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.
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Funktionsaufruf aus einer Headerdatei

  Alt 10. Feb 2009, 15:59
Hi,

Delphi-Quellcode:
var
schreibwort : Word;
begin
schreibwort := 32;
Callback(@schreibwort, 1, True);
SetCallBack(CallBack); //Initialisierung des USB-Boards
end;
Eine Callback-Funktion wird (normalerweise) nicht selbst aufgerufen,
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...
Gruß
Norman
  Mit Zitat antworten Zitat
oli_a

Registriert seit: 10. Jul 2008
29 Beiträge
 
#7

Re: Funktionsaufruf aus einer Headerdatei

  Alt 10. Feb 2009, 16:10
jetzt check ich's langsam.

Also die
Delphi-Quellcode:
procedure MyCallback(pData: pByte; DatLen: DWord; PcToDevice: Boolean); stdcall;
  begin
    // mach irgendwas
  end;
ist sozusagen, die Callbackfunktion, die durch die DLL aufgerufen wird.
Und mit dem Befehl
SetCallBack(MyCallBack); sag ich der DLL also, wie diese aussieht.

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;
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Funktionsaufruf aus einer Headerdatei

  Alt 11. Feb 2009, 09:50
HI,

Zitat:
In der Funktion selber muss ich dann sozusagen die Werte der Variablen pData: pByte; DatLen: DWord; PcToDevice: Boolean bestimmen.
Fast

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:
procedure MyCallback(pData: pByte; DatLen: DWord; PcToDevice: Boolean); stdcall;
  begin
    pData := @Schreib_Daten;
    DatLen := 1;
    PcToDevice := True;
  end;
wird also nicht funktionieren.
Gruß
Norman
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

Re: Funktionsaufruf aus einer Headerdatei

  Alt 11. Feb 2009, 10:31
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);
$2B or not $2B
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Funktionsaufruf aus einer Headerdatei

  Alt 11. Feb 2009, 13:08
Zitat von himitsu:
...und es ist eher so...
hab´ ich jetzt etwas anderes behauptet
Gruß
Norman
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz