AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein .NET-Framework (managed code) Delphi Zugriff auf C# COM-Objekt von Delphi aus
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff auf C# COM-Objekt von Delphi aus

Ein Thema von Dawn87 · begonnen am 13. Apr 2011 · letzter Beitrag vom 13. Apr 2011
Antwort Antwort
Dawn87

Registriert seit: 15. Feb 2007
Ort: Lüdenscheid
189 Beiträge
 
Delphi XE5 Professional
 
#1

Zugriff auf C# COM-Objekt von Delphi aus

  Alt 13. Apr 2011, 09:41
Hallo,

ich habe eine DLL in C# erstellt, die ein COM-Objekt mit diversen Funktionen enthält:

Code:
namespace MeinComObjekt
{
    [Guid("258FDBD3-7778-400f-B161-BA63CBAC2A03")]
    [ComVisible(true)]
    [InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface IEnvironment
    {
        /* Öffentliche Methoden: */
        bool Initialize_bool(uint Reserved_u32);
        string GetActiveProjectGUID_str();

      // usw.
    }
}
Zu diesem COM-Interface gibt es noch eine Klasse, welche die Funktionen implementiert.

Der Aufruf der Funktionen über Eary-Binding klappt, d.h. wenn ich mir von Delphi eine TLB-Datei generieren lassen, kann ich die Funktionen aufrufen.

Wenn ich versuche das Ganze mit Delphi 2007 über Late-Binding anzusprechen, und so soll es später im Programm auch erfolgen, funktioniert der Aufruf sämtlicher Funktionen mit Ausnahme derjenigen Funktionen, die keine Parameter erwarten, wie z. B. GetActiveProjectGUID_str();.

Delphi-Quellcode:
var
  Obj: Variant;
begin
  Obj := CreateOleObject('MeinComObjekt.Environment');

  if Obj.aftInitialize_bool(0) then
  begin
    ShowMessage(Obj.aftGetDLLVersion_str());
  end
  else
  begin
    ShowMessage('Initialisierung fehlgeschlagen!');
  end;
Die Fehlermeldung die ich beim Aufruf bekomme ist vom Typ EOleSysError und lautet:
"Unzulässige Parameteranzahl"

Aufrufe aus einem VBS-Skript klappen dagegen hervorragend, d. h. die Implementierung im Com-Objekt selber scheint zu stimmen.

Hat jemand eine Idee, weshalb der Aufruf aus Delphi scheitert?

Grüße
Dawn
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#2

AW: Zugriff auf C# COM-Objekt von Delphi aus

  Alt 13. Apr 2011, 22:28
Delphi-Quellcode:
var
  Obj: Variant;
Müsste der Typ nicht OleVariant heißen? Also wenn du Delphis Art von IDispatch nutzen willst.

Du musst aber nicht den Weg über COM gehen, wenn du nicht willst.
Du kannst zum Beispiel die JCL nutzen, um die CLR zu hosten und dann einfach Instanzen deiner Klassen erzeugen. Mehr dazu hier. Aber immer daran denken, dass deine .Net Typen weiterhin ComVisible(true) sein müssen.

Delphi-Quellcode:
var
  Host: TJclClrHost;
  Obj: OleVariant;
begin
  try
    Host := TJclClrHost.Create();
    Host.Start();
 
    Obj := Host.DefaultAppDomain
               .CreateInstance('DeineAssembly',
                               'MeinComObjekt.Environment')
               .UnWrap();
    WriteLn('Test: ', Obj. aftGetDLLVersion_str());

    Host.Stop();
  except
    on E: Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”

Geändert von Elvis (13. Apr 2011 um 22:32 Uhr) Grund: Quote hinzugefügt
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz