Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi wie auf andere interfaces einer COM-dll zugreifen? (https://www.delphipraxis.net/150767-wie-auf-andere-interfaces-einer-com-dll-zugreifen.html)

maz 26. Apr 2010 15:58


wie auf andere interfaces einer COM-dll zugreifen?
 
Hallo leute,
habe hier eine dll die mit regsvr32 als com obj registriert ist. ich habe mir von delphi die TLB erstellen lassen und binde diese mit uses ein. das funktioniert alles super, ich kann auch auf die methoden eines interfaces zuggreifen. jetzt hat aber diese dll (wenn ich mit delphi reinschau) mehrere interfaces, und ich bräuchte eine methode die unter einem anderen interface aufgelistet wird. wie kann ich denn darauf zugreifen?

der einzige type der in der TLB zu finden ist, ist dieser:
Delphi-Quellcode:
// *********************************************************************//
// OLE Server Proxy class declaration
// Server Object   : TMSFileReader_XRawfile
// Help String     : MSFileReader XRawfile Class
// Default Interface: IXRawfile
// Def. Intf. DISP? : No
// Event  Interface:
// TypeFlags       : (2) CanCreate
// *********************************************************************//
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
  TMSFileReader_XRawfileProperties= class;
{$ENDIF}
  TMSFileReader_XRawfile = class(TOleServer)
  private
    FIntf:       IXRawfile;
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
    FProps:      TMSFileReader_XRawfileProperties;
in der dll gibt es aber noch das interface "IXRawfile4" das die Methoden parat hält, die ich gerne nutzen möchte. jemand eine idee? danke für jeden tipp.

mkinzler 26. Apr 2010 16:29

Re: wie auf andere interfaces einer COM-dll zugreifen?
 
Das scheint der einzige Typ zu sein, der registriert wurde.

shmia 26. Apr 2010 16:32

Re: wie auf andere interfaces einer COM-dll zugreifen?
 
Du kannst von Ausserhalb einer ActiveX-DLL nur Interfaces erzeugen für die es auch eine CoClass gibt.
Es kann dann viele weitere Interfaces geben, an die du aber nur indirekt herankommst.

Dazu gibt es zwei Möglichkeiten:
1.) über eine Funktion bekommst du den Interface-Zeiger eines anderen Objekts.
ein kleines (fiktive) Beispiel:
Delphi-Quellcode:
var
  winlist : IWindowList;
  win : IWindow;
  i : integer;
begin
  winlist := CoWindowList.Create;
  for i:=0 to winlist.count-1 do
  begin
    // hier passierts: winlist gibt dir quasi "freiwillig" einen Interface-Zeiger auf ein anderes Objekt
    win := winlist.Items[i];
  end;
2.) über Umwandlung des Interface in einen anderen Typ
Delphi-Quellcode:
var
  winlist : IWindowList;
  x : IIEWindowList3;
begin
  winlist := CoWindowList.Create;
  x := winlist as IWindowList3
Man kann also ein Interface in ein anderes Interface eintauschen.
Delphi ruft dazu verborgen im Hintergrund die Methode QueryInterface() auf.

In deinem Fall bestehen sehr gute Chancen, dass du ein IXRawfile Interface problemlos in ein IXRawfile4 umwandeln kannst.

maz 27. Apr 2010 08:55

Re: wie auf andere interfaces einer COM-dll zugreifen?
 
für alle die es interessiert, mit SIMA's 2ter Lösung hats geklappt. danke! die erste hab ich nicht probiert. zu erwähnen wäre noch das das besagte xrawile3 interface das "normale" xrawfile interface als parent hatte.


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