Einzelnen Beitrag anzeigen

NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Globales Interface erzeugen

  Alt 15. Jun 2012, 14:45
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:
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);
Wenn ich das richtig verstehe, willst du eine ActiveX-Dll bauen bzw. einbinden.
Also wäre in diesem Fall Variante 1 ratsam.
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat