![]() |
Globales Interface erzeugen
Hallo Zusammen!
Ich habe gerade einen "Hänger".. ich habe ein Interface erzeugt...
Delphi-Quellcode:
Und ein "Server-Form" erzeugt mit:
IVVComInterface = interface(IInvokable)
['{DDDD293D-1D84-49AC-8B91-9403898D7872}'] { Methoden von Invokable-Interface dürfen nicht die Vorgabe- } { Aufrufkonvention verwenden; stdcall wird empfohlen } Function Commando(Aktion:byte):AnsiString; stdcall; end;
Delphi-Quellcode:
Ein Zugriff auf dieses Interface versuche ich mit:
TForm47 = class(TForm,IVVComInterface)
... InvRegistry.RegisterInterface(TypeInfo(IVVComInterface));
Delphi-Quellcode:
Aber das Interface wird nicht gefunden! Was habe ich übersehen?
Var
ServerLink : IVVComInterface; MyGuid : TGuid; begin MyGuid := StringtoGuid('{DDDD293D-1D84-49AC-8B91-9403898D7872}'); if QueryInterface(MyGuid,Serverlink) = 0 then ServerLink.Commando(1); Grüsse Mavarik |
AW: Globales Interface erzeugen
Es gibt 2 unterschiedliche Interface-"Arten"
- Einmal Interfaces, die in einer ActiveX-Dll sind. Diese werden meistens über CoCreateInstance erstellt. Diese Interfaces haben schon Funktionsabläufe, vielleicht sogar Events. Auf diese Events kann man nur zugreifen, wenn man das Interface in eine Klasse packt. - Das Zweite sind Interfaces, die als eine "abtrakte" Klasse dienen. Also nur Funktionsnamen vorgeben. Diese bekommen erst eine Funktion, wenn sie in eine Klasse eingebunden werden. Soweit zur erklären Allgemein. In deinem Fall würde das ganze so Ausehen:
Delphi-Quellcode:
Wenn ich das richtig verstehe, willst du eine ActiveX-Dll bauen bzw. einbinden.
TForm47 = class(TForm,IVVComInterface)
Function Commando(Aktion:byte):AnsiString; stdcall; //Ich würde AnsiString zu PAnsiChar machen, da sich Strings in DLL sich nicht so gut machen. end; Var ServerLink : TForm47; ServerLinkInterface : IVVComInterface; MyGuid : TGuid; begin //Erstele Variante ServerLink := TForm47.Create; //Falls es nicht schon irgendwo steht ServerLink.Commando(1); //Da du das Interface mit der Klasse verbunden hast kannst du ganz normal auf die Funktionen zugreifen //Zweite Variant MyGuid := StringtoGuid('{DDDD293D-1D84-49AC-8B91-9403898D7872}'); CoCreateInstance(MyGuid,nil,IVVComInterface,ServerLinkInterface); ServerLinkInterface.Commando(1); Also wäre in diesem Fall Variante 1 ratsam. |
AW: Globales Interface erzeugen
versuch die DLL doch mal von Hand zu Registrieren
regserv.. bla bla gruss |
AW: Globales Interface erzeugen
Zitat:
|
AW: Globales Interface erzeugen
Danke erstmal für die Infos...
CoCreateInstance funktioniert so nicht... Ist auch keine DLL sonderne eine Exe und ich will auf keinen Fall die miot Regsvr erst registrieren müssen... Mavarik |
AW: Globales Interface erzeugen
Zitat:
Zitat:
gruss |
AW: Globales Interface erzeugen
Liste der Anhänge anzeigen (Anzahl: 1)
So wird das nix.
Anwendungen, die von Aussen per ActiveX gesteuert werden sollen brauchen eine Typbibliothek und duale Interfaces. Im Anhang ist Sourcecode zu einer Testanwendung. Compilieren, Starten und dann das beiliegende VB-Script starten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:51 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