Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Auf interfaces zugreifen, wie? (https://www.delphipraxis.net/22697-auf-interfaces-zugreifen-wie.html)

XCoderD7 21. Mai 2004 18:47


Auf interfaces zugreifen, wie?
 
Hallo

Also ich bin ein anfänger in sachen Com. Ich habe eine unit in der Interfaces stehen. Die interfaces haben auch funktionen. Aber wenn ich ein objekt von einem Interface mache, kommt ein Fehler.

Was muss ich machen?
Hier die Unit
http://dd.cron.ru/dbg/dnld/phpdbgintf210.zip

Ich versuche auf das IDbgListener interface zu zu greifen. Bekomme aber immer einen Zugriffs Fehler.

danke

MathiasSimmack 21. Mai 2004 20:42

Re: Auf interfaces zugreifen, wie?
 
Die meisten Interfaces müssen vorher erzeugt werden, wie bspw. hier bei MS-XML 4:
Delphi-Quellcode:
var
  xmldoc : DomDocument40;
begin
  xmldoc := CoDomDocument40.Create;

  { ... }
end;
So etwas finde ich aber in der von dir gezeigten Unit nicht. Daher reicht eine einfache Zuweisung wahrscheinlich schon aus. Zur Sicherheit solltest du aber "CoInitialize" und "CoUninitialize" im Programm aufrufen. Wenn du ein typisches VCL-Programm schreibst, dann wird sich der Code für dein Programm ja wohl in einer Unit befinden, und da könntest du das so machen:
Delphi-Quellcode:
unit Unit1;

uses
  { ... }, ActiveX;


{ ... }


initialization
  CoInitialize(nil);
finalization
  CoUninitialize;
end.
Wenn es ein Konsolen- oder nonVCL-Programm ist, dann könntest du das im Hauptteil wie folgt machen:
Delphi-Quellcode:
begin
  if(CoInitialize(nil) = S_OK) then
  try
    // Fenster erzeugen, oder Befehle abarbeiten
    { ... }
  finally
    CoUninitialize;
  end;
end.

XCoderD7 21. Mai 2004 20:51

Re: Auf interfaces zugreifen, wie?
 
Danke, scheint aber hier aber nicht zu funktionieren hier mein code

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    Listener: IDbgListener;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
  var ver: integer;
      desc: WideString;
begin
  Listener.GetVersion(ver, desc);
  ShowMessage(IntToStr(ver) + '  |   '+ desc);
end;

initialization
  CoInitialize(nil);
finalization
  CoUninitialize;
end.

Jens Schumann 21. Mai 2004 20:59

Re: Auf interfaces zugreifen, wie?
 
Du musst auch das machen was Mathias Dir geschrieben hat.
An welcher Stelle in Deinem Source createst Du Listener???

XCoderD7 21. Mai 2004 21:03

Re: Auf interfaces zugreifen, wie?
 
Zitat:

Zitat von Jens Schumann
Du musst auch das machen was Mathias Dir geschrieben hat.
An welcher Stelle in Deinem Source createst Du Listener???

Hallo
Also ich mache das was Mathias sagt:

Zitat:

So etwas finde ich aber in der von dir gezeigten Unit nicht.
:)

Jens Schumann 21. Mai 2004 21:05

Re: Auf interfaces zugreifen, wie?
 
Hallo,
versuch doch mal meine Frage zu beantworten: An welcher Stelle in Deinem Source createst Du Listener???

XCoderD7 21. Mai 2004 21:09

Re: Auf interfaces zugreifen, wie?
 
Zitat:

Zitat von Jens Schumann
Hallo,
versuch doch mal meine Frage zu beantworten: An welcher Stelle in Deinem Source createst Du Listener???

Überhaupt nicht, wie soll ich den listener den createn?

Jens Schumann 21. Mai 2004 21:23

Re: Auf interfaces zugreifen, wie?
 
Versuch es doch mal so:
Im OnCreate des Formulars
Delphi-Quellcode:
Listener:=CreateComObject(IID_IDbgListener) as IDbgListener;

XCoderD7 21. Mai 2004 21:29

Re: Auf interfaces zugreifen, wie?
 
Danke, leider kommt ein Fehler Klasse nicht registriert vom typ "EOleSysError" was kann man dagegen machen?

Jens Schumann 21. Mai 2004 21:32

Re: Auf interfaces zugreifen, wie?
 
Zitat:

Zitat von XCoderD7
Danke, leider kommt ein Fehler Klasse nicht registriert vom typ "EOleSysError" was kann man dagegen machen?

Es müsste auch so lauten
Delphi-Quellcode:
Listener:=CreateComObject(CLASS_CoDbgListener) as IDbgListener;
Wenn das nicht klappt wiess ich auch nicht weiter.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:43 Uhr.
Seite 1 von 2  1 2      

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