![]() |
Zugriff auf C# COM-Objekt von Delphi aus
Hallo,
ich habe eine DLL in C# erstellt, die ein COM-Objekt mit diversen Funktionen enthält:
Code:
Zu diesem COM-Interface gibt es noch eine Klasse, welche die Funktionen implementiert.
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. } } 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:
Die Fehlermeldung die ich beim Aufruf bekomme ist vom Typ EOleSysError und lautet:
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; "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 |
AW: Zugriff auf C# COM-Objekt von Delphi aus
Zitat:
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 ![]()
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz