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.