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
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
711 Beiträge
 
Delphi 12 Athens
 
#1

AW: Event aus DLL für HotSpot Nutzen

  Alt 24. Jun 2019, 14:39
Also bisher habe ich Folgendes versucht

Code:
unit PadKlasse;

interface

uses Winapi.Windows, Classes;

Type
  TSTSensorHotSpotPressed = Procedure(nHotSpotID:integer)Of Object;

  TStPad = class

    constructor create;
    destructor destroy;
private
    FOnSensorHotSpotPressed:TSTSensorHotSpotPressed;
Procedure SensorHotSpotPressed(nHotSpotID : Integer);
procedure STSensorHotSpotPressed_stdcall(nHotSpotId: Smallint);register; // Das ist das Event das ich von der DLL kriege
external 'STPadLib.dll';
Procedure TStPad.SensorHotSpotPressed(nHotSpotID : Integer);
begin
    //

end;
Du kannst keine Methode einer Klasse als external deklarieren, das geht nur mit normalen Prozeduren.


Ich versteh auch das Design nicht, was vermutlich teilweise an deiner irreführenden Verwendung von "event" liegt . Eine DLL exportiert keine Events, sie exportiert Funktionen oder Prozeduren, die von der Anwendung aufgerufen werden sollen, d.h. die Aktion beginnt in der Anwendung (Benutzer drückt button), wird von der Anwendung erkannt (OnClick event des buttons) und die ruft dann eventuell eine von der DLL exportierte Funktion/Prozedur auf, damit die DLL noch irgendwas macht. Danach kehrt der Programmfluss wieder in die Anwendung zurück.

Diese Verwendung von DLLs ist der häufigste Fall, der Aufruf der DLL ist synchron, d.h. kehrt erst zur Anwendung zurück, wenn die DLL ihren Teil erledigt hat. Es gibt auch eine asynchrone Variante, aber die ist ganz anders aufgebaut.

In diesem Fall ruft die Anwendung eine exportierte Funktion auf um einen sog. Callback zu installieren. Das ist eine Funktion der Hostanwendung, die die DLL aufrufen soll, wenn sie etwas an die Hostanwendung übermitteln will. Die Frage ist dann von welchem Punkt im Programmfluß aus dieser Aufruf erfolgen soll. Eine DLL führt nur dann Kode unabhängig von der Hostanwendung aus, wenn sie dafür einen sekundären Thread angelegt hat, ansonsten führt sie nur Kode als Reaktion auf einen Funktionsaufruf der Hostanwendung aus. In diesem kann sie aber durchaus einen vorher installierten Callback aufrufen, z. B. um die Hostanwendung über den Fortschritt der Arbeit zu informieren.

Du hast uns ja bisher so ziemlich nichts über deine Anwendung verraten. Wenn deine TStPad-Klasse im Wesentlichen die externe DLL vom Rest der Anwendung verbergen soll würde das in etwa so funktionieren:

Deine Anwendung hat einen Button mit einem normal in der IDE erzeugten Handler für den OnClick event. Der Eventhandler ruft eine public-Methode einer Instanz deiner TStPad-Klasse auf, diese Methode ruft dann die von der DLL exportierte Funktion auf.

Delphi-Quellcode:
unit PadKlasse;

interface

uses Winapi.Windows, Classes;

Type
  TStPad = class
  public
    constructor create;
    destructor destroy;
    // die wird von button.onclick aufgerufen
    Procedure SensorHotSpotPressed(nHotSpotID : Integer);
  end;

implementation

procedure STSensorHotSpotPressed_stdcall(nHotSpotId: Smallint);stdcall;
external 'STPadLib.dll';

Procedure TStPad.SensorHotSpotPressed(nHotSpotID : Integer);
begin
   STSensorHotSpotPressed_stdcall(nHotspotID);
end;
Peter Below
  Mit Zitat antworten Zitat
Johnny123

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

AW: Event aus DLL für HotSpot Nutzen

  Alt 24. Jun 2019, 14:49
Ich kann dir gerne mal die ganze Unit per PN Schicken

Vllt bringt das dan mehr
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
711 Beiträge
 
Delphi 12 Athens
 
#3

AW: Event aus DLL für HotSpot Nutzen

  Alt 24. Jun 2019, 18:37
Ich kann dir gerne mal die ganze Unit per PN Schicken

Vllt bringt das dan mehr
Glaube ich nicht, sorry. Die Unit nützt nichts wenn Du nicht verrätst, was Du da eigentlich erreichen willst, was die Anwendung tun soll, wo die Dll herkommt und was ihre Funktion ist. Bisher ist noch nicht mal klar, um was für eine Platform es geht und welches Framework (Vcl, fmx) da im Spiel ist. No data, no solution, sorry.
Peter Below
  Mit Zitat antworten Zitat
Johnny123

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

AW: Event aus DLL für HotSpot Nutzen

  Alt 27. Jun 2019, 11:19
ok Also ich programmiere in Delphi Xe7
So was das Programm machen soll ...

Es geht um ein Signpad auf diesem sind Buttons die HotSpots genannt werden
und sobald ich einen der buttons Drücke soll dieses Ereignis aus der DLL die zum Signpad gehört aktiviert werden
Framework is VCL

Jeder Hotspot hat seine eigene ID als beispiel wenn ich Den Cancel Hotspot drücke soll die verbindung zum Signpad geschlossen werden

Hoffe das konnte dir jetzt helfen
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
711 Beiträge
 
Delphi 12 Athens
 
#5

AW: Event aus DLL für HotSpot Nutzen

  Alt 27. Jun 2019, 11:44
ok Also ich programmiere in Delphi Xe7
So was das Programm machen soll ...

Es geht um ein Signpad auf diesem sind Buttons die HotSpots genannt werden
und sobald ich einen der buttons Drücke soll dieses Ereignis aus der DLL die zum Signpad gehört aktiviert werden
Framework is VCL

Jeder Hotspot hat seine eigene ID als beispiel wenn ich Den Cancel Hotspot drücke soll die verbindung zum Signpad geschlossen werden

Hoffe das konnte dir jetzt helfen
Das heist, Du erwartest eine Reaktion der DLL wenn der Benutzer einen Hotspot auf dem Signpad drückt.

Das sieht nach dem asynchronen Scenario aus. Was ist das für eine DLL? Ist es eine COM/ActiveX Library, ein .NET assembly, oder hat sie eine Sammlung von exportierten Funktionen? Ist da irgend eine Datei dabei, die das Interface der DLL beschreibt, ein C-Headerfile, eine type library, Dokumentation, Beispiele zur Anwendung?
Peter Below
  Mit Zitat antworten Zitat
Johnny123

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

AW: Event aus DLL für HotSpot Nutzen

  Alt 27. Jun 2019, 12: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
711 Beiträge
 
Delphi 12 Athens
 
#7

AW: Event aus DLL für HotSpot Nutzen

  Alt 27. Jun 2019, 12: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
Antwort Antwort


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 03:14 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-2025 by Thomas Breitkreuz