Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Probleme mit EnumDispatchProperties (https://www.delphipraxis.net/165072-probleme-mit-enumdispatchproperties.html)

fuchsle 13. Dez 2011 16:38

Probleme mit EnumDispatchProperties
 
Hallo,

ich habe eine eigene COM-Schnittstelle wie folgt eingebunden:
Delphi-Quellcode:
var
Plugin: Variant;
Delphi-Quellcode:
Plugin := CreateOleObject('ClimaController.TFW_ClimaController') as IDispatch;
Ich kann bisher auf die Properties zugreifen, dies geschieht jedoch "blind"
Delphi-Quellcode:
  Edit_PT1001.Text := FloatToStr(Plugin.PT1001);
  Edit_PT1002.Text := FloatToStr(Plugin.PT1002);
Wenn ich, was ich bisher gelesen habe, nicht falsch interpretiere, sollte ich über:
Delphi-Quellcode:
procedure EnumDispatchProperties(Dispatch: IDispatch; PropType: TGUID; VTCode: Integer; PropList: TStrings);
Die Eigenschaften der IDispatch auslesen können.

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.

Bummi 13. Dez 2011 17:17

AW: Probleme mit EnumDispatchProperties
 
Komponente importieren ,ActiveX und die xxx_tlb einbinden?

fuchsle 13. Dez 2011 17:27

AW: Probleme mit EnumDispatchProperties
 
Zitat:

Zitat von Bummi (Beitrag 1141232)
Komponente importieren ,ActiveX und die xxx_tlb einbinden?

Mit TLB läuft es wunderbar. Aber es soll ohne die TLB realisiert werden.
Darüber sollen "Plugins" angebunden werden und um es flexibel zu halten ohne TLB.

fuchsle 14. Dez 2011 09:13

AW: Probleme mit EnumDispatchProperties
 
Meine *.ridl sieht wie folgt aus.
Delphi-Quellcode:
// ************************************************************************ //
// 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;
  };

};
Dies wurde automatisch erzeugt, habe lediglich über den Assi die Methode und einige Eigenschaften hinzugefügt.

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.

fuchsle 19. Dez 2011 12:39

AW: Probleme mit EnumDispatchProperties
 
Zitat:

Zitat von Bummi (Beitrag 1141232)
Komponente importieren ,ActiveX und die xxx_tlb einbinden?


Habe es versucht zumindest so hin zu bekommen. Aber meine Listbox bleibt einfach leer.
Wo bin ich nun auf dem falschen Weg?

Delphi-Quellcode:
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.
Danke für eure Hilfe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:02 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