AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi-Objekte in .NET

Ein Thema von Motzi · begonnen am 4. Apr 2007 · letzter Beitrag vom 6. Apr 2007
Antwort Antwort
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#1

Delphi-Objekte in .NET

  Alt 4. Apr 2007, 19:03
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
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Delphi-Objekte in .NET

  Alt 6. Apr 2007, 00:12
*push* ich glaub an euch!
Manuel Pöter
  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 07:05 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