AGB  ·  Datenschutz  ·  Impressum  







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

Event aus DLL für HotSpot Nutzen

Ein Thema von Johnny123 · begonnen am 24. Jun 2019 · letzter Beitrag vom 17. Jul 2019
Antwort Antwort
Seite 2 von 3     12 3      
Johnny123

Registriert seit: 24. Jun 2019
15 Beiträge
 
#11

AW: Event aus DLL für HotSpot Nutzen

  Alt 27. Jun 2019, 11:16
Ja richtig genau Soll halt bei Cancel die verbindung schließen bei Okay auf Unterschrift wechseln etc

Es gibt eine C-Header Datei und eine Dokumentation zu der DLL
Hab noch diverse andere Funktionen aus DLL exportiert die funktionieren soweit auch super

nur mit dem Ereignis hab ich halt ein Problem
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
672 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Event aus DLL für HotSpot Nutzen

  Alt 27. Jun 2019, 11:43
Ja richtig genau Soll halt bei Cancel die verbindung schließen bei Okay auf Unterschrift wechseln etc

Es gibt eine C-Header Datei und eine Dokumentation zu der DLL
Hab noch diverse andere Funktionen aus DLL exportiert die funktionieren soweit auch super

nur mit dem Ereignis hab ich halt ein Problem
Ich müßte die Header-Datei sehen um Dir da weiterhelfen zu können. Kannst Du die in ein zip-Archiv packen und als Anhang an deine Antwort hängen?
Peter Below
  Mit Zitat antworten Zitat
Johnny123

Registriert seit: 24. Jun 2019
15 Beiträge
 
#13

AW: Event aus DLL für HotSpot Nutzen

  Alt 28. Jun 2019, 09:40
https://workupload.com/file/fDLMb9fH

Hier einmal die Header Datei als Zip
weiß nicht ob man die auch direkt hier einfügen kann
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
672 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Event aus DLL für HotSpot Nutzen

  Alt 28. Jun 2019, 14:31
https://workupload.com/file/fDLMb9fH

Hier einmal die Header Datei als Zip
weiß nicht ob man die auch direkt hier einfügen kann
Man kann Dateianhänge an Forum-Posts anhängen. Wenn Du den POst schreibst ist unter dem Eingabefenster eine Sektion "zusätzliche Einstellungen" und dortselbst findet sich ein "Anhänge verwalten"-Knopf, der einen zu einer Seite bringt, wo man eine Datei ins Forum laden kann.

Anyway, nachdem ich erstmal die Übelkeit überwunden hatte, die mich beim Lesen von C-Kode immer befällt sieht es so aus, als wenn die DLL wirklich einen asynchronen Benachrichtigungsmechanismus unterstützt.

Code:
// callback typedef
typedef VOID (*CBPTR)(LONG nEvent, LPVOID pData, LONG nDataSize, LPVOID pCustomPar);
Das entspricht der Delphi-Deklaration

Delphi-Quellcode:
type
  TStPadCallback = procedure (nEvent: Longint; pData: Pointer; nDatasize: Longint;
    pCustomPar: pointer); cdecl;
Installiert wird ein solcher callback offenbar mit Hilfe einer der beiden exportierten Funktionen

Code:
extern "C" STPADLIB_API VOID STControlSetCallback(CBPTR pCallback, LPVOID pCustomPar);
extern "C" STPADLIB_API VOID __stdcall STControlSetCallback_stdcall(CBPTR pCallback, LPVOID pCustomPar);
Die unterscheiden sich nur in der calling convention und so wie der Header aussieht ist die stdcall-Variante nur in der 32-Bit DLL verfügbar. Beide sind aus Delphi verwendbar.

Deine Klasse sollte dann etwa so aussehen:

Delphi-Quellcode:

Type
  TStPad = class
  private
    procedure InstallCallback;
    procedure UninstallCallback;
  public
    constructor create;
    destructor destroy; override;
    procedure SensorHotSpotPressed(nHotSpotID : Integer);
  end;

// in implementation section
type
  TStPadCallback = procedure (nEvent: Longint; pData: Pointer; nDatasize: Longint;
    pCustomPar: pointer); cdecl;

procedure STControlSetCallback(pCallback: TStPadCallback; pCustomPar: pointer); cdecl;
  external 'STPadLib.dll';
procedure STControlSetCallback_stdcall(pCallback: TStPadCallback; pCustomPar: pointer);
  stdcall; external 'STPadLib.dll';


const
// callback event IDs
  STPAD_CALLBACK_DISCONNECT = 0;
  STPAD_CALLBACK_HOTSPOT = 1;
  STPAD_CALLBACK_TIMEOUT = 2;
  STPAD_CALLBACK_SCROLL = 3;
  STPAD_CALLBACK_SIGNATURE = 4;

procedure CallbackStub (nEvent: Longint; pData: Pointer; nDatasize: Longint;
    pCustomPar: pointer); cdecl;
var
  LHotspotID: integer;
begin
  if nEvent = STPAD_CALLBACK_HOTSPOT then
    if Assigned(pData) and (nDatasize = sizeof(integer)) then begin
      LHotspotID := pInteger(pData)^;
      if Assigned(pCustomPar) then
        TStPad(pCustomPar).SensorHotSpotPressed(LHotspotID);
    end;
end;


{ TStPad }

constructor TStPad.create;
begin
  inherited;
  InstallCallback;
end;

destructor TStPad.destroy;
begin
  UninstallCallback;
end;

procedure TStPad.InstallCallback;
begin
  STControlSetCallback(CallbackStub, Self);
end;

procedure TStPad.SensorHotSpotPressed(nHotSpotID: Integer);
begin

end;

procedure TStPad.UninstallCallback;
begin
  STControlSetCallback(nil, Self);
end;
Du mußt mal die Dokumentation checken um zu verifizieren, wie der Callback die ID des Hotspots übergeben bekommt, da konnte ich natürlich nur spekulieren.
Peter Below

Geändert von peterbelow (28. Jun 2019 um 14:38 Uhr) Grund: override fehlte
  Mit Zitat antworten Zitat
Johnny123

Registriert seit: 24. Jun 2019
15 Beiträge
 
#15

AW: Event aus DLL für HotSpot Nutzen

  Alt 2. Jul 2019, 15:14
Sobald ich zeit habe werde ich es mal austesten
und melde mich dan wieder
  Mit Zitat antworten Zitat
Johnny123

Registriert seit: 24. Jun 2019
15 Beiträge
 
#16

AW: Event aus DLL für HotSpot Nutzen

  Alt 16. Jul 2019, 09:12
Hallo peterbelow

also habe es soweit eingebaut nur Kackt jetzt alles ab sobald ich den Hotspot drücke und kriege folgende fehlermeldung
und er öffnet in Delphi das CPU fenster
hab ich als Anhang mal screens von rein gesetzt
Miniaturansicht angehängter Grafiken
fehler.png   cpu-anzeige.png  
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#17

AW: Event aus DLL für HotSpot Nutzen

  Alt 16. Jul 2019, 09:15
Hallo,
und wo genau, an welcher Stelle des Quellcodes ?
Heiko
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
672 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: Event aus DLL für HotSpot Nutzen

  Alt 16. Jul 2019, 09:21
Hallo peterbelow

also habe es soweit eingebaut nur Kackt jetzt alles ab sobald ich den Hotspot drücke und kriege folgende fehlermeldung
und er öffnet in Delphi das CPU fenster
hab ich als Anhang mal screens von rein gesetzt
Sieht so aus als wenn die DLL intern auf einen Fehler läuft. Wenn Du einen breakpoint auf die erste Kodezeile in CallbackStub setzt, wird der noch erreicht?
Peter Below
  Mit Zitat antworten Zitat
Johnny123

Registriert seit: 24. Jun 2019
15 Beiträge
 
#19

AW: Event aus DLL für HotSpot Nutzen

  Alt 16. Jul 2019, 10:45
if nEvent = STPAD_CALLBACK_HOTSPOT then

von der zeile aus sprint er direkt zum Ende hin

und als nEvent zeigt er eine zahl an 6194160

Geändert von Johnny123 (16. Jul 2019 um 10:48 Uhr)
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
672 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: Event aus DLL für HotSpot Nutzen

  Alt 16. Jul 2019, 13:34
if nEvent = STPAD_CALLBACK_HOTSPOT then

von der zeile aus sprint er direkt zum Ende hin

und als nEvent zeigt er eine zahl an 6194160
Mh, ändere mal die calling convention für den callback typ und für CallbackStub auf stdcall statt cdecl.

Ich kenne mich nicht so besonders aus mit C/C++, vielleicht habe ich die Deklaration im Header falsch interpretiert.
Peter Below
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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