AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Globales Interface erzeugen

Ein Thema von Mavarik · begonnen am 15. Jun 2012 · letzter Beitrag vom 15. Jun 2012
Antwort Antwort
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.076 Beiträge
 
Delphi 10.3 Rio
 
#1

Globales Interface erzeugen

  Alt 15. Jun 2012, 14:15
Hallo Zusammen!

Ich habe gerade einen "Hänger"..

ich habe ein Interface erzeugt...

Delphi-Quellcode:
  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;
Und ein "Server-Form" erzeugt mit:

Delphi-Quellcode:
  TForm47 = class(TForm,IVVComInterface)
...
  InvRegistry.RegisterInterface(TypeInfo(IVVComInterface));
Ein Zugriff auf dieses Interface versuche ich mit:

Delphi-Quellcode:
Var
  ServerLink : IVVComInterface;
  MyGuid : TGuid;
begin
  MyGuid := StringtoGuid('{DDDD293D-1D84-49AC-8B91-9403898D7872}');
  if QueryInterface(MyGuid,Serverlink) = 0 then
    ServerLink.Commando(1);
Aber das Interface wird nicht gefunden! Was habe ich übersehen?

Grüsse Mavarik
  Mit Zitat antworten Zitat
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
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Globales Interface erzeugen

  Alt 15. Jun 2012, 15:30
versuch die DLL doch mal von Hand zu Registrieren
regserv.. bla bla

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.197 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Globales Interface erzeugen

  Alt 15. Jun 2012, 15:47
Zitat:
regsvr32 DllName.dll
Am besten mit Adminrechten!
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.076 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Globales Interface erzeugen

  Alt 15. Jun 2012, 15:59
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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Globales Interface erzeugen

  Alt 15. Jun 2012, 16:11
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
Wie willst dann an dein Interface kommen wenn diese nicht public sind?
Zitat:
Aber das Interface wird nicht gefunden! Was habe ich übersehen?

gruss
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

AW: Globales Interface erzeugen

  Alt 15. Jun 2012, 16:58
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.
Angehängte Dateien
Dateityp: zip ActiveXStarterkit.zip (7,1 KB, 6x aufgerufen)
Andreas
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf