Einzelnen Beitrag anzeigen

Elvis

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

Re: Von Delphi Win32 auf .NET Assemblies zugreifen?

  Alt 9. Jul 2009, 17:09
Bevor es wieder untergeht.
Hier ist das Archiv mit den Binaries und dem .targets file.

Du musst es einfach nur in deinen Projektordner extrahieren.
  • Um an das Attribut zu kommen, hast du 2 Wege.
    • Der einfachste ist, per "Show all Files" (1) das DllExportAttribute.cs in dein Project zu packen (2)
    • ein anderer ist die RGiesecke.DllExport.DllExportAttribut.dll zu referenzieren.
      Diese Dll ist speziell, denn diese Referenz wird von meinem Build-Task entfernt, genau wie das Attribut von der Methode entfernt wird, wenn er damit fertig ist.
  • Nun musst du dem Projekt nur noch sagen, dass es ein neues Build target gibt.
    • Klicke dafür auf (4) oder Rechtsklick im Solution Explorer\Unload project.
    • Rechtsklick auf das nun graue Project im Solution Explorer -> Edit "Xyz.abc"
    • Jetzt musst du einfach nur noch das hier unterhalb des <Project>-Knotens packen:
      XML-Code:
      <Project ToolsVersion="3.5"
               DefaultTargets="Build"
               xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
        <Import Project="DllExport\RGiesecke.DllExport.targets" />

Das war's. Er wird dich beim ersten Build warnen, weil du wahrscheinlich als CPU Typ "AnyCPU" stehen hast.
In dem Fall wird er unterhalb des Outputfolders je einen Ordner für x86 und einen für x64 anlegen und dort jeweils die Binaries als x86- und x64 Version ablegen.

Wenn du direkt den CPU Typ in deinem projekt auf x86 oder x64 setzt schreibt er direkt in dein Binary. (Also unter Debug ode Release)

Deine Assemblies sind dann wirkliche DLLs und die exportierten Funktionen verhalten sich eigentlich wie man es auch erwartet. Du kannst sie also als UDF in Firebird nutzen, oder einfach nur als eine bequeme Art .Net Funktionen in Delphi zu nutzen.

Es sollte ab Visual Studio 2005 aufwärts laufen. Oder auch ohne, da es einfach nur .Net 2.0 und MSBuild braucht.
Ich nutze noch ILAsm um die Assembly wieder zusammenzusetzen, dafür braucht man leider das .Net SDK.

Wenn du die Files im Projektordner hast, kann jeder dieses Projekt kompilieren, auf der Maschine muss nichts extra eingestellt werden. (Also zickt auch der Build Server nicht rum )


Weile es vllt auch andere interessiert habe ich es doch einfach offen reingestellt.
Miniaturansicht angehängter Grafiken
dllexport_screenie_440.png  
Angehängte Dateien
Dateityp: zip dllexport_180.zip (184,1 KB, 114x aufgerufen)
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