AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Ereigniss in DLL zuweisen

Ein Thema von Xate · begonnen am 30. Jan 2012 · letzter Beitrag vom 30. Jan 2012
Antwort Antwort
Xate

Registriert seit: 11. Jun 2010
12 Beiträge
 
Delphi 2005 Architect
 
#1

Ereigniss in DLL zuweisen

  Alt 30. Jan 2012, 15:19
Hallo,

ich versuche gerade zwei Events einem Object zuzuweisen. Mein Quellcode sieht so aus:
Delphi-Quellcode:
[B]library[/B] report2010;

{ Wichtiger Hinweis zur DLL-Speicherverwaltung: ShareMem muss sich in der
  ersten Unit der unit-Klausel der Bibliothek und des Projekts befinden (Projekt-
  Quelltext anzeigen), falls die DLL Prozeduren oder Funktionen exportiert, die
  Strings als Parameter oder Funktionsergebnisse übergeben. Das gilt für alle
  Strings, die von oder an die DLL übergeben werden -- sogar für diejenigen, die
  sich in Records und Klassen befinden. Sharemem ist die Schnittstellen-Unit zur
  Verwaltungs-DLL für gemeinsame Speicherzugriffe, BORLNDMM.DLL.
  Um die Verwendung von BORLNDMM.DLL zu vermeiden, können Sie String-
  Informationen als PChar- oder ShortString-Parameter übergeben. }



uses
  SysUtils, Classes, Windows, Dialogs,
  qrddlgs, dbxquery, CRSQLConnection,
  QrPrntr, printers, DB, DBTables,
  DBClient, Forms, Qrdctrls, QrDesign,
  dll_database, DBCtrls, ExtCtrls,
  QRExport, QRPDFFilt, QRWebFilt,
  ShellAPI;




{$R *.res}

type
  TDataModule1 = class(TDataModule)
  end;


var
  ReportDesignerDialog1 : TReportDesignerDialog;
  index_d : WideString;
  filter_d, dir_d, sql_d : WideString;
  Benutzer_after, Druckname_after : WideString;
  kopie : integer;
  AExportFilter : TQRRTFExportFilter;
  pdfFilter : TQRPDFDocumentFilter;
  htmlFilter : TQRGHTMLDocumentFilter;
  db : Tdll_datamodule;
  query : TDBXQuery;
  laufwerk, lwtemp : String;
Weiter unten habe ich drei Prozeduren, wovon die untere extern angesprochen werden kann.
( den Part von begin bis end hab ich rausgelassen)
Delphi-Quellcode:
procedure BeforeOpenDataset(DS: TDataSet);
procedure ReportDesignerDialog1AfterReportLoaded(Form: TForm; QRD: TComponent);
procedure RX1(ReportName,Art,Filter,dir,sql,index:WideString;
              DF:Boolean;
              anz_d : Integer;
              intern : Boolean;
              Dokuname,kundennr,benutzer : WideString); stdcall;
Nun will ich in der RX1 Prozedur folgendes tun:
Delphi-Quellcode:
  // Reportdesigner erzeugen und Ereignisse zuweisen
  reportdesignerdialog1 := Treportdesignerdialog.Create(nil);
  ReportDesignerDialog1.BeforeOpenDataset := BeforeOpenDataset;
  ReportDesignerDialog1.AfterReportLoaded := ReportDesignerDialog1AfterReportLoaded;
Leider bekomme ich dort diese Fehlermeldungen:
Code:
[Fehler] report2010.dpr(209): E2009 Inkompatible Typen: 'Methodenzeiger und reguläre Prozedur'
[Fehler] report2010.dpr(210): E2009 Inkompatible Typen: 'Methodenzeiger und reguläre Prozedur'
Setzte ich ein @ vor das ganze, erhalte ich folgende Meldungen:
Code:
[Fehler] report2010.dpr(209): E2010 Inkompatible Typen: 'TDataSetNotifyEvent' und 'Pointer'
[Fehler] report2010.dpr(210): E2010 Inkompatible Typen: 'TQRDAfterReportLoadedEvent' und 'Pointer'
Kann mir da jemand weiterhelfen?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.270 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Ereigniss in DLL zuweisen

  Alt 30. Jan 2012, 15:22
Eine Methode gehört zu einer Klasse, also brauchst Du auch eine solche.
Delphi-Quellcode:
procedure MachWas; //reguläre Prozedur

procedure TMyClass.MachWas; //Methode von TMyClass
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Xate

Registriert seit: 11. Jun 2010
12 Beiträge
 
Delphi 2005 Architect
 
#3

AW: Ereigniss in DLL zuweisen

  Alt 30. Jan 2012, 15:38
Erstmal danke für deine Antwort!

Jetzt sieht das ganze so aus:
Delphi-Quellcode:
{$R *.res}

type
  TDataModule1 = class(TDataModule)
  procedure BeforeOpenDataset(DS: TDataSet);
  procedure ReportDesignerDialog1AfterReportLoaded(Form: TForm; QRD: TComponent);

end;
Die Prozeduren stehen entsprechend mit TDataModule1. im Quellcode.

  ReportDesignerDialog1.BeforeOpenDataset := TDataModule1.BeforeOpenDataset; erzeugt jetzt die Meldung
Code:
[Fehler] report2010.dpr(213): E2010 Inkompatible Typen: 'TDataSetNotifyEvent' und 'Procedure'
Habe ich etwas vergessen?!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.270 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Ereigniss in DLL zuweisen

  Alt 30. Jan 2012, 15:42
Sind die Signaturen der beiden Methoden gleich, d.h. Parameter des gleichen Typs in derselben Reihenfolge? Und für
Zitat:
TDataModule1.BeforeOpenDataset;
müsste das ja eine Klassenmethode sein, Du musst also die Methode einer Instanz dieser Klasse nehmen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.586 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Ereigniss in DLL zuweisen

  Alt 30. Jan 2012, 15:46
Jupp, entweder du muß noch eine Instanz von TDataModule1 erstellen, über welche dann auf BeforeOpenDataset verwiesen wird,
oder du machst TDataModule1.BeforeOpenDataset zu einer "class procedure", was man auch nutzen könnte.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.270 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Ereigniss in DLL zuweisen

  Alt 30. Jan 2012, 15:47
oder du machst TDataModule1.BeforeOpenDataset zu einer "class procedure", was man auch nutzen könnte.
Aber nicht, wenn die Delphi-Version im Profil stimmt
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Xate

Registriert seit: 11. Jun 2010
12 Beiträge
 
Delphi 2005 Architect
 
#7

AW: Ereigniss in DLL zuweisen

  Alt 30. Jan 2012, 15:53
Ich habe vor den Deklarationen und den Prozeduren selbst ein class gepackt. Funktioniert nun ohne Fehlermeldungen.
Ob er die Ereignisse wirklich auslöst, weiss ich noch nicht.

Ich werde mich zukünftig auf jeden Fall mit http://www.delphi-treff.de/object-pa...n-und-objekte/
auseinandersetzten

Dankeschön
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 10:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf