Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Prism Delphi-Objekte in .NET (https://www.delphipraxis.net/89716-delphi-objekte-net.html)

Motzi 4. Apr 2007 18:03


Delphi-Objekte in .NET
 
Hi,

ich hab einen in Delphi geschriebenen Parser, der einen String erhält, diesen zerlegt und dann ein Objekt zurückgibt. Dieser Parser soll jetzt auch für .NET zur Verfügung stehen, allerdings liefert der Parser ein Delphi-Objekt zurück. Da .NET aber schließlich mit COM-Interfaces arbeiten kann, hab ich mir gedacht ich könnte einfach Interfaces verwenden. Die Delphi-Klassen implementieren diese Interfaces, und über die Interfaces kann ich auch aus .NET auf die Objekte zugreifen.
Ich hab dazu mal ein kleines Test-Programm geschrieben, allerdings funktioniert das nicht so wie geplant. Hier die Interface-Deklarationen:
Delphi-Quellcode:
type
{$IFDEF CLR}
  [ComImport,
   GuidAttribute('257A2C12-24C4-4A2E-8E34-376D5D185904'),
   InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
{$ENDIF}
  IParsedObject = interface
{$IFDEF WIN32}
  ['{257A2C12-24C4-4A2E-8E34-376D5D185904}']
{$ENDIF}
    function foo: String; stdcall;
  end;

{$IFDEF CLR}
  [ComImport,
   GuidAttribute('19845562-721E-483D-BB56-55C0B0EDBDCC'),
   InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
{$ENDIF}
  IParser = interface
{$IFDEF WIN32}
  ['{19845562-721E-483D-BB56-55C0B0EDBDCC}']
{$ENDIF}
{$IFDEF CLR}
    [return: MarshalAs(UnmanagedType.Interface)]
{$ENDIF}
    function Parse(const s: string): IParsedObject; stdcall;
  end;
Dann hab ich eine DLL die im großen und Ganzen so ausschaut:
Delphi-Quellcode:
procedure GetParser(out parser: IParser); stdcall;
begin
  parser := TParser.Create();
end;

exports
  GetParser;
Und in meinem .NET Programm versuche ich mit diesen Code eine IParser-Instanz zu bekommen:
Delphi-Quellcode:
[DllImport('..\win32\parser.dll')]
procedure GetParser([MarshalAs(UnmanagedType.Interface)] out parser: IParser); external;

procedure TForm1.Button1Click(Sender: TObject);
var
  parser: IParser;
begin
  GetParser(parser);
end;
Allerdings erhalte ich dabei eine System.ExecutionEngineException. Mach ich irgendwo was falsch, oder ist mein Ansatz sowieso komplett zum vergessen? Hat irgendwer eine Idee?

LG, Manuel

Motzi 5. Apr 2007 23:12

Re: Delphi-Objekte in .NET
 
*push* ich glaub an euch! ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:57 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