Einzelnen Beitrag anzeigen

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