AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Funktionen aus .NET4-DLL in Delphi 5 aufrufen
Thema durchsuchen
Ansicht
Themen-Optionen

Funktionen aus .NET4-DLL in Delphi 5 aufrufen

Ein Thema von storfi · begonnen am 7. Sep 2011 · letzter Beitrag vom 8. Sep 2011
Antwort Antwort
storfi

Registriert seit: 1. Dez 2004
15 Beiträge
 
Delphi 5 Enterprise
 
#1

Funktionen aus .NET4-DLL in Delphi 5 aufrufen

  Alt 7. Sep 2011, 19:32
Hallo zusammen,

ich habe ein großes Projekt in Delphi 5 und muss über eine .NET-Klasse auf eine andere Anwendung zugreifen. Da ich das Projekt unmöglich auf eine höhere Delphi-Version hochziehen kann, war meine Idee, mit Visual Studio eine Klassenbibliothek auf .NET4 zu erstellen und die Funktionen in Delphi aus der DLL zu starten.

Für einen ersten Test habe ich eine neue Klassenbibliothek mit C# erstellt und den Aufruf einer einfachen Prozedur in Visual Studio erfolgreich getestet.
Dann habe ich den Aufruf der DLL in Delphi 5 so versucht:

Delphi-Quellcode:
procedure ...
var t_dllhandle: THandle;
    t_dllfunction: TFarProc;
    t_procedure: TdoHelloMsg;
begin
...
    t_dllhandle:=LoadLibrary(PChar(g_testdll));
    t_dllfunction:=GetProcAddress(t_dllhandle, 'doHelloMsg');
...
Das Handle bekomme ich noch ordnungsgemäß, aber dann ist t_dllfunction nach dem GetProcAddress() immer "nil".

Nun meine Frage:
Kann ich eine .NET-DLL überhaupt einfach so in Delphi 5 ansprechen?
Hat jemand evtl. eine andere Idee, ein Stück .NET4 in Delphi 5 ohne dieses COM-Interop zu starten?
Ich muss hier keine Daten austauschen, es geht nur um den Prozeduraufruf, um irgendwelche Aktionen in der .NET-Klasse auszulösen.

Vielen Dank,
Christian
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.640 Beiträge
 
#2

AW: Funktionen aus .NET4-DLL in Delphi 5 aufrufen

  Alt 7. Sep 2011, 20:13
Du hast mehrere Möglichkeiten, die aber immer auf eines dieser beiden herauslaufen: COM oder Reverse P/Invoke.

COM ist definitiv zu bevorzugen, da es die Sache ungeheuer einfach macht.

Reverse P/Invoke ist nicht wirklich schön. Die nötigen Informationen sollten hier drin stehen - die müsstest Du dann aber ggf. noch von .NET 2.0 auf 4.0 heben.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Elvis

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

AW: Funktionen aus .NET4-DLL in Delphi 5 aufrufen

  Alt 7. Sep 2011, 21:34
COM ist definitiv zu bevorzugen, da es die Sache ungeheuer einfach macht.
Reverse P/Invoke ist nicht wirklich schön.
COM braucht aber entweder globale Registration, oder man muss sich mit SxS auskennen.
Vor allem muss man mit SxS zusammen mit .Net aufpassen. (Bis vor XP SP2 gab das sogar reproduzierbar einen Bluescreen!)

Wenn man aber Funktionen aus .Net Assemblies exportiert, und dabei COM-kompatible Interfaces nutzt, kann man weiterhin schön OO programmieren und (s)eine native App ohne viel Setup und Abhängigkeit mit .Net features versehen.

Zitat:
Die nötigen Informationen sollten hier drin stehen - die müsstest Du dann aber ggf. noch von .NET 2.0 auf 4.0 heben.
Ist nicht mehr ganz aktuell.
Ich habe ein Projekttemplate, welches das Aufsetzen des Projektes so einfach macht, als würde man ein DLL-Projekt in Delphi anlegen.
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.”
  Mit Zitat antworten Zitat
storfi

Registriert seit: 1. Dez 2004
15 Beiträge
 
Delphi 5 Enterprise
 
#4

AW: Funktionen aus .NET4-DLL in Delphi 5 aufrufen

  Alt 8. Sep 2011, 09:43
Guten Morgen,

vielen Dank für das Template, habe ich gleich ausprobiert. Allerdings funktioniert der Build nicht, weil die LIB.EXE nicht gefunden wird. Kann es sein, dass das Template unter Visual C# 2010 EXPRESS nicht funktioniert? Welche Version würde ich denn benötigen?

Vielen Dank,
Christian
Christian
  Mit Zitat antworten Zitat
Elvis

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

AW: Funktionen aus .NET4-DLL in Delphi 5 aufrufen

  Alt 8. Sep 2011, 11:05
Lib.exe ist ein Tool, welches .lib files für C++ erzeugt. (Das wollten einige User haben)
Ich breche meinen Task dummerweise ab, wenn ich aus VisualStudio gestartet werde, aber es kein Lib.exe gibt.
Eine einfache Lösung ist es vorerst eine leere Consolen App als Lib.exe an den Platz zu packen, über den er meckert. (Sollte dein VS Express Ordner sein und darin VC\bin\Lib.exe)

Kurzversion:
- Das tritt nur bei Express-Editionen auf, bzw wenn kein C++ da ist.
- Du kannst in deinem VS Order eine leere Consoleapp namens Lib.exe in den Ordner VC\bin packen

Mit leere Console app meine ich sowas:
Delphi-Quellcode:
program Lib;

{$APPTYPE CONSOLE}

begin

end.

Heute abend schaue ich es mir an und muss dann wohl eine neue Version veröffentlichen. (Mal schauen, ob die angestaubte Windows VM zu Hause noch funktioniert *g*)
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 ( 8. Sep 2011 um 11:35 Uhr)
  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 16:36 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