![]() |
Probleme mit EnumDispatchProperties
Hallo,
ich habe eine eigene COM-Schnittstelle wie folgt eingebunden:
Delphi-Quellcode:
var
Plugin: Variant;
Delphi-Quellcode:
Ich kann bisher auf die Properties zugreifen, dies geschieht jedoch "blind"
Plugin := CreateOleObject('ClimaController.TFW_ClimaController') as IDispatch;
Delphi-Quellcode:
Wenn ich, was ich bisher gelesen habe, nicht falsch interpretiere, sollte ich über:
Edit_PT1001.Text := FloatToStr(Plugin.PT1001);
Edit_PT1002.Text := FloatToStr(Plugin.PT1002);
Delphi-Quellcode:
Die Eigenschaften der IDispatch auslesen können.
procedure EnumDispatchProperties(Dispatch: IDispatch; PropType: TGUID; VTCode: Integer; PropList: TStrings);
Möchte einfach die Eigenschaften der eingebundenen Schnittstellen ermitteln können. Kann mir da jemand weiterhelfen? Entweder mit einem Beispiel zu der genannten Prozedur oder mit einem evtl. "besseren" Weg. Vielen Dank. |
AW: Probleme mit EnumDispatchProperties
Komponente importieren ,ActiveX und die xxx_tlb einbinden?
|
AW: Probleme mit EnumDispatchProperties
Zitat:
Darüber sollen "Plugins" angebunden werden und um es flexibel zu halten ohne TLB. |
AW: Probleme mit EnumDispatchProperties
Meine *.ridl sieht wie folgt aus.
Delphi-Quellcode:
Dies wurde automatisch erzeugt, habe lediglich über den Assi die Methode und einige Eigenschaften hinzugefügt.
// ************************************************************************ //
// WARNUNG // ------- // Diese Datei wird von dem Typbibliotheks-Importer oder dem Typbibliothekseditor // erzeugt. Außer Syntaxfehlern analysiert der Editor an der Datei vorgenommene // Änderungen. Wenn Sie aber Änderungen mit dem Editor vornehmen, wird diese // Datei neu erzeugt und Kommentare oder Formatänderungen gehen verloren. // ************************************************************************ // // Datei erzeugt am 14.12.2011 10:03:59 (- $Rev: 12980 $, 8529900). [ uuid(81DF182E-5186-4B80-BC0B-2B02CB6C5003), version(1.0) ] library ClimaController { importlib("stdole2.tlb"); interface ITFW_ClimaController; coclass TFW_ClimaController; [ uuid(8DF256B0-3FB9-428A-A4D4-DC256B9AF3BD), helpstring("Dispatch-Interface für TFW_ClimaController-Objekt"), dual, oleautomation ] interface ITFW_ClimaController: IDispatch { [propget, id(0x000000CA)] HRESULT _stdcall PT1001([out, retval] double* Value); [propget, id(0x000000CB)] HRESULT _stdcall PT1002([out, retval] double* Value); [propget, id(0x000000CC)] HRESULT _stdcall PT1003([out, retval] double* Value); [propget, id(0x000000CD)] HRESULT _stdcall PT1004([out, retval] double* Value); [propget, id(0x000000CE)] HRESULT _stdcall NO2([out, retval] double* Value); [propget, id(0x000000CF)] HRESULT _stdcall State([out, retval] int* Value); [propget, id(0x000000D0)] HRESULT _stdcall Error([out, retval] int* Value); [propget, id(0x000000D1)] HRESULT _stdcall ErrorMsg([out, retval] BSTR* Value); [propget, id(0x000000D2)] HRESULT _stdcall get_tSet([out, retval] double* Value); [id(0x000000D3)] HRESULT _stdcall set_tSet([in] double Param1); [propget, id(0x000000C9)] HRESULT _stdcall Chamber([out, retval] double* Value); }; [ uuid(12EE300E-BF96-4984-9467-88562F62E2F8), helpstring("TFW_ClimaController Objekt") ] coclass TFW_ClimaController { [default] interface ITFW_ClimaController; }; }; Wie für das late binding benötigt, würde ich nun davon ausgehen, dass eine IDispatch Schnittstelle realisiert wurde. Nur wie komm ich in meinem Client an die Eigenschaften und Methoden ran ohne diese "blind" eingeben zu müssen? Dabei geht es darum die vTable, welche sonst durch das Einbinden der TLB erzeugt wird, nun nach einem late binding zu erhalten. Freue mich sehr über eure Hilfe, aktuell komm ich einfach nicht weiter. |
AW: Probleme mit EnumDispatchProperties
Zitat:
Habe es versucht zumindest so hin zu bekommen. Aber meine Listbox bleibt einfach leer. Wo bin ich nun auf dem falschen Weg?
Delphi-Quellcode:
Danke für eure Hilfe.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ActiveX, ClimaController_TLB, StdCtrls, AxCtrls; type TForm1 = class(TForm) ListBox1: TListBox; procedure FormCreate(Sender: TObject); private { Private-Deklarationen } ClimaController: IDispatch; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin ClimaController := CoTFW_ClimaController.Create; EnumDispatchProperties( ClimaController , GUID_NULL, VT_EMPTY, ListBox1.Items); end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:04 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