Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi7 mit .Net Dll per SideBySide(SxS) mit Manifest (https://www.delphipraxis.net/175877-delphi7-mit-net-dll-per-sidebyside-sxs-mit-manifest.html)

SlashMcKagen 25. Jul 2013 11:52

Delphi7 mit .Net Dll per SideBySide(SxS) mit Manifest
 
Hallo Zusammen,

eine Sache erstmal vorweg: Ich bin nicht nur Anfänger, was Delphi betrifft, ich habe wirklich KEINE Ahnung von Delphi ;-) Ich versuche auch "nur" ein kleines Testprogramm zu basteln, welches dann später von andern richitg Umgesetzt wird.
Nun aber zum Thema:

Ich habe eine DLL in VB.net geschrieben (geht nur in VB.Net, der FastReport in der .Net-Variante soll benutzt werden)
Diese DLL macht also nicht viel mehr als mit der funktion START den FastReport zu starten.
Diese .Net DLL soll jetzt in Delphi 7 eingebunden werden. Funktioniert auch wunderbar, solange die DLL mit Regasm.exe registiert ist
Diese Registrierung kann ich aber aus bestimmten Gründen nicht vorraussetzen. Darum habe ich mich in das Thema RegFree Com eingelesen.
Also habe ich 2 Manifest-Dateien erstellt (die Dll.Manifest und die exe.Manifest)
Wenn ich über diesen Weg ein Testprogramm in VB6 schreibe, funktioniert das alles wunderbar ohne Registrierung.
Mein VB6-Code:

Code:
Private Sub Command2_Click()
Set ActCtx = CreateObject("Microsoft.Windows.ActCtx")
ActCtx.manifest = "c:\ViewerDLL.manifest"
Dim Obj As Object
Set Obj = ActCtx.CreateObject("ViewerDLL.ReportViewer")
Obj.Start ("")
End Sub
Wie kann ich etwas vergleichbares in Delphi schaffen? Wie gesagt, ich hab absolut keine Ahnung, mir fehlen bei Delphi sämtliche Grundlagen. Ich habe aber, glaube ich, mittlerweile jede Seite durch, auf der irgendwas zu dem Thema steht, aber nichts hilft mir bei meinem Simplen Testprogramm.
Habt Ihr da eine Idee?
Wenn noch mehr Infos fehlen, einfach bescheid geben, ich werde dann versuchen nachzubessern.

Danke euch schonmal im Vorraus

Phoenix 25. Jul 2013 11:59

AW: Delphi7 mit .Net Dll per SideBySide(SxS) mit Manifest
 
Zitat:

Zitat von SlashMcKagen (Beitrag 1222641)
Ich habe eine DLL in VB.net geschrieben (geht nur in VB.Net, der FastReport in der .Net-Variante soll benutzt werden)

*Schauder* Natürlich geht es nicht nur in VB.Net. C# wäre eine durchaus gangbare Alternative ;-)

Das ganze Delphi / .NET Interop-Zeug ist zwar, wenn man das einmal geschnackelt hat, keine Rocket Science, aber doch immer sehr nervig, hakelig und nicht gerade bequem.

Ich würde mir mal Hydra anschauen. Hier kannst Du aus Deiner .NET Assembly sehr einfach ein Plugin machen und das mit ein paar Zeilen in Deinen Delphi-Host laden.
Und zwar - das ist das geniale daran, sogar sehr einfach direkt innerhalb Deiner Anwendung auf einem Deiner Forms anzeigen - ohne das User großartig einen Unterschied merkt. Klar, das ist eine kommerzielle Lösung, aber wenn Du Dir die Trial mal anschaust und Du das Ding in 20-30 Minuten fertig hast, dann wirst Du merken das es das echt Wert ist.

SlashMcKagen 25. Jul 2013 13:40

AW: Delphi7 mit .Net Dll per SideBySide(SxS) mit Manifest
 
Zitat:

Zitat von Phoenix (Beitrag 1222643)
*Schauder* Natürlich geht es nicht nur in VB.Net. C# wäre eine durchaus gangbare Alternative ;-)

Ja, da hast du natürlich recht, ich drücke mich anders aus: Es geht nur in .net und für MICH auch nur in VB.Net ;-)

Bezgl. Hydra:
Ich glaube kaum, dass ich bei uns eine Lösung über Hydra durchsetzen könnte, zumal dieses dann nur für dieses eine einzige Projekt gebraucht würde.
Zumal wenn das das ich vorhabe, so wie du sagst, grundsätzlich funktioniert.
Den Anleitungen im Netz kann man ja wenigstens entnehmen, dass es der ein oder andere schon mal auf diesem Weg zum Laufen gebracht hat. Und außerdem dachte ich immer (Zitat befreundeter Programmierer:) Delphi kann alles. Nunja, bei diesem Problem kann ER mir aber leider auch nicht helfen :evil:
Vielleicht landet ja hier nochmal jemand, der das selbe Probiert hat. Schließlich ist der VB6-Code so simpel, da müsste es doch auch irgendeine Lösung für Delphi geben.

LG

Phoenix 25. Jul 2013 14:14

AW: Delphi7 mit .Net Dll per SideBySide(SxS) mit Manifest
 
Wenn das mit COM und registrierter Dll schonmal funktioniert, dann ist das nötige Zeug auf .NET Seite also ComVisible und hat auch seine Guids etc. pp?

Bist Du der Anleitung hier gefolgt?
http://stackoverflow.com/questions/5...078671#5078671

Ansonsten wäre eine andere Idee COM komplett aussen vor zu lassen und unmanaged Exports von Robert zu verwenden: https://sites.google.com/site/robert...managedexports

SlashMcKagen 29. Jul 2013 08:48

AW: Delphi7 mit .Net Dll per SideBySide(SxS) mit Manifest
 
Sorry erstmal,
die Urlaubsstimmung macht sich so langsam breit, komm erst jetzt wieder dazu.

Zitat:

Zitat von Phoenix (Beitrag 1222672)
Wenn das mit COM und registrierter Dll schonmal funktioniert, dann ist das nötige Zeug auf .NET Seite also ComVisible und hat auch seine Guids etc. pp?

Also ComVisible ist es und Guids sollten auch da sein (müssen ja auch in der Manifest-Datei angegeben werden)
Und da oben stehender VB6 Code problemlos ohne registrieren läuft, denke ich ja, dass von der DLL-Seite alles passen sollte.

Zitat:

Zitat von Phoenix (Beitrag 1222672)
Bist Du der Anleitung hier gefolgt?
http://stackoverflow.com/questions/5...078671#5078671

Nicht so direkt. Ich habe viele Seiten gelesen und dann alles "zusammengeworfen" Eine einzelene Anleitung habe ich nicht Schritt für Schritt verfolgt.
Mein Problem ist ja, dass ich es erstmal mit VB6 zum laufen bekommen wollte, weil ich nichts von Delphi verstehe und in der Anleitung, die du gepostet hast, keinerlei Delphi-Code drin ist (und ich noch nichtmal bei Hello World so sicher wäre, wie der Code ist :roll: ). Von daher hab ich gedacht, mach ichs erstmal mit VB6 und schaue obs da geht und das hat geklappt.
Die in der Anleitung angesprochene Ressource einbinden habe ich auch noch nicht gemacht (habs zwar Probiert, hat aber nichts geändert).
Mein Problem ist ja, dass ich noch nicht mal richtig weis, wie dann der Aufruf passieren muss und was ich unter "uses" schreiben muss, wenn die DLL nicht registriert ist (Delphi kann ja ohne einen richtigen Import die Klasse gar nicht kennen).
Bei VB6 hab ich das Problem nicht, da definiere ich ein Objekt und speise dann da mein Manifest ein. Läuft alles per Laufzeit, so dass beim Kompillieren die Klasse noch nicht bekannt sein muss.

Liebe Grüße aus dem heißen Bayern....


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