![]() |
COM Interface / pdfMachine
Hallo zusammen,
ich versuche mich gerade im ersteller eines COM Interfaces. Leider hab ich das noch nie gemacht, und habe dazu ein paar Fragen. Grundsätzlich möchte ich ein Programm machen das sich in die PDF Machine Software einklinkt ( ![]() Dazu habe ich folgende Infos gefunden: ![]() Die benötigten Registry Einträge konnte ich erfolgreich machen, und sehe diese neuen Buttons jetzt auch. Mein Problem ist allerdings der Abschnitt "COM Interface - click handler". Hier verstehe ich nicht genau was für eine Art Projekt ich jetzt im Delphi anlegen muss "Neu-Weitere-ActiveX-?" Geschweige denn welche Parameter ich bei den Funktionen angeben muss? Kann mir hier jemand unter die Arme greifen? :gruebel: Gruss und Danke |
Re: COM Interface / pdfMachine
ActiveX musst du nur machen, wenn du selber n ActiveX-Control machen willst, glaub ich mal...
Es sollte schon so funktionieren:
Delphi-Quellcode:
Dann musst du nur noch ein Object erzeugen und als Interface bei Machine PDF bekannt machen.
type
IMyPDFMachineInterface = interface(IDispatch) procedure clicked(ButtonText, pdfMachineViewer: TVariant); //Variant weil ioch nicht weiss was das für datentypen sien müssen... da muss du dich selber noch ein wenig einlesen ;) end; TMachinePDFHandler = class(TObject, IMyPDFMachineInterface); //implement IMyPDFMachineInterface procedure clicked(ButtonText, pdfMachineViewer: TVariant); end; Eventuell must du wirklcih ein OLE-Objekt registrieren... da kenn ich mich nicht aus... EDIT: OK, du musst das wirklcih als komplettes OLE-Objekt bauen. da kann ich dir nicht helfen, sry, aber das codeschnipsel oben gehört auch dazu ;) |
Re: COM Interface / pdfMachine
*push* hat wirklich niemand eine Ahnung wie ich diesen COM-Server implementieren muss?
|
Re: COM Interface / pdfMachine
Du fängst ohne Projekt an.
Datei -> Neu -> ActiveX -> ActiveX-Bibliothek (also eine DLL) dann Datei -> Neu -> ActiveX -> Automatisierungsobjekt Name der CoClass: "PdfButton" Es wird der TLB-Editor angezeigt. Du wählst das Interface "IPdfButton" und wählst "neue Methode" Die Methode bekommt den Namen "Clicked" Auf der Seite Parameter fügst du 2 neue Parameter hinzu: Name: "buttonText" Typ: BSTR Name: "pdfMachineviewer" Typ: IDispatch * Im TLB-Editor drückst du auf Implementierung aktualisieren Delphi generiert dir folgenden Sourcecode:
Delphi-Quellcode:
procedure TPdfButton.Clicked(const buttonText: WideString;
const pdfMachineviewer: IDispatch); begin // und hier musst du dann weitermachen end; |
Re: COM Interface / pdfMachine
Liste der Anhänge anzeigen (Anzahl: 2)
hallo shmia,
danke für die rasche Antwort! Ich hab das jetzt mal gemäss Deinen Vorgaben versucht. Das erstellen des COM-Servers hat wunderbar funktioniert. Leider funktioniert irgendwas doch noch nicht ganz...anbei mal der Source Code und die Fehlermeldung die mir die PDFMachine auslöst. Was könnte ich noch falsch gemacht haben? :wall: Die Einstellungen gemäss ![]() als Wert im "extraButtonsComHandler" habe ich "HorizonPDFMachine.dll" eingetragen. Der Button ist sonst richtig eingetragen, sonst würde er ja in der PDFMachine nicht ersichtlich sein. hmm... Ideen? :gruebel: Mit der "*.WSC - Datei" Methode habe ich es auch versucht, das scheint zu funktionieren. |
Re: COM Interface / pdfMachine
Zitat:
Hier deine TLB-Datei (im IDL-format):
Code:
Deine Bibliothek heisst HorizonPDFMachine, deine CoClass heisst PdfButton
library HorizonPDFMachine
{ // TLib : // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046} importlib("stdole2.tlb"); // Forward declare all types defined in this typelib interface IPdfButton; [ odl, uuid(569A5C4B-839E-4199-87DC-6385C39577E6), version(1.0), helpstring("Dispatch-Schnittstelle für PdfButton-Objekt"), dual, oleautomation ] interface IPdfButton : IDispatch { [id(0x00000001)] HRESULT clicked( [in] BSTR buttonText, [in] IDispatch* pdfMachineviewer); }; [ uuid(F557474E-27A7-44E7-8B04-263351DCA7BD), version(1.0), helpstring("PdfButton Objekt") ] coclass PdfButton { [default] interface IPdfButton; }; }; => ClassID = 'HorizonPDFMachine.PdfButton' Windows findet deine DLL über Einträge in der Registry/COM-Datenbank. Dazu musst du sie aber registrieren mit RegSvr32.exe oder in Delphi mit Start->ActiveX Server eintragen |
Re: COM Interface / pdfMachine
:dancer: wunderbar, das funktioniert!
Vielen Dank für die schnelle und professionelle Hilfe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:22 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