Autor Beitrag
Vegeto
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: Mo 27.07.15 15:27 
Hallo,

ich stehe vor einer geschlossenen Tür :S
ich weiß leider nicht mehr weiter :/ Aber hier mal zu meinem Problem:
Ich habe eine Delphi Anwendung, die greift auf eine (von mir selbst entwickelte) .Net-Schnittstelle zu. Eigentlich funktioniert das ganze auch, doch nun bei der neuen Funktion kommt es zu einen Fehler! Diesen kann ich mir aber nicht erklären.

Ich habe die .Net - Schnittstelle um einige Funktionen erweitert, sobald ich diese nun in die Delphi Anwendung integriere (mit /tlb und registieren etc.) kann ich meine alten Funktionen benutzen, doch sobald ich die neue Funktionen nutzen will passiert nichts!(die alten Funktionen der DLL werden weiterhin ausgeführt)
Doch es kommt noch seltsamer, die Entwickelte Delphi Anwendung führe ich auf zwei PC-System aus, auf der einen Maschine wurde die .Net-Schnittstelle entwickelt und auf der anderen die Delphi Anwendung.

Sobald ich die Delphi-Anwendung(.exe) auf den Computer ausführe (dort wo die .Net Schnittstelle entwickelt wurden) funktioniert alles tadellos! Sobald ich die exe auf dem anderen Computer (Delphi Anwendung wurde hierauf entwickelt) ausführen funktionieren nur die älteren Funktionen und nicht die neueren !? (Whaaaat :?: :?: )

Ich habe beide Systeme nach DLL und nach Abhängigkeiten der EXE überprüft es gibt kein unterschied, nur das eine System ist 32bit und das andere 64bit... Aber hieran kann es nicht liegen, denn die EXE (mit der Schnittstelle) läuft mit den alten Funktionen auf beiden PC-System... Ich frage mich woran das ganze liegen kann. :cry: :oops:

Der einzige unterschied der mir jetzt so einfällt, ist das ich den Rechner (.Net Schnittstelle entwickelt) die mscorlib.dll registriert habe und auf dem anderen Rechner nicht, doch dies bezüglich habe ich im Netz gelesen, dass Delphi bei der Installation der Umgebung die mscorlib.dll automatisch registriert!!! :shock:

Auf beiden Rechner sind die selben .Net Frameworks etc. und es funktioniert trotzdem unterschiedlich... :shock: :shock:

Ich weiß einfach nicht mehr weiter und hoffe irgendjemand kann mir diesbezüglich helfen. Vielleicht bei RegAsm, oder beim aufbau der Anwendung.

ich bedanke mich für das Lesen des Beitrags und hoffe auf jegliche Hilfe! :(

LG
OlafSt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 459
Erhaltene Danke: 90

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Mo 27.07.15 17:43 
Da brauchts paar mehr Informationen.

- Schnittstelle = Interfaces ?
- Die alten Funktionen in einer DLL, die neuen in einer anderen DLL ?

Im wesentlichen klingt das ganze aber danach, als wäre die .NET-Geschichte mit AnyCPU kompiliert. Das führt dazu, das auf 64Bit-Systemen automatisch auch 64Bit verwendet wird, was zwingend eine 64Bit-Delphi-Anwendung erfordert. 64Bit-Anwendungen können eine 32Bit-DLL nicht verwenden. Auch nicht mit Tricks.

In den .NET-Projektsettings gibt es eine Einstellung "32 Bit bevorzugen", so das .NET erstmal davon ausgeht, das 32Bit-DLLs erforderlich sind. Nach meinen Erfahrungen kommt dann aber keine AnyCPU-DLL mehr dabei heraus, sondern einfach nur 32Bit.

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.

Für diesen Beitrag haben gedankt: Vegeto
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18730
Erhaltene Danke: 1630

W10 x64 (Chrome, IE11)
Delphi 10.2 Ent, Oxygene, C# (VS 2015), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 27.07.15 17:45 
Ich hätte von Anfang an empfohlen Win32 DLL Exporte in der .NET DLL zu erstellen. Dann hättest du das Problem mit Registrieren usw. nicht.

Ich vermute eine Kopie der DLL liegt noch irgendwo. Welche DLL benutzt wird, siehst du am einfachsten im Process Monitor mit Filter auf Path Contains DLL-Dateiname.

Für diesen Beitrag haben gedankt: Vegeto
Vegeto Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: Mi 29.07.15 11:49 
Hallo OlafSt und jaenicke

ich entschuldige mich, dass ich erst jetzt antworte!
Ich habe ein neuen x64 System aufgesetzt (vollkommen nackt) ich habe hierauf VS2010 und Delphi installiert. Ich konnte die Delphi Anwendung starten, doch die Funktion wurde nicht ausgeführt!
Auf der Nackten x64bit Maschine habe ich es auch geschafft alle benötigten DLL's zu registrieren :) (hat aber nicht zum erfolg gefüher:( ).
Ich habe die DLL auch separat als x64 DLL exportiert, auch kein Erfolg!

Jetzt stell ich mir die Frage liegt es vielleicht daran dass die DLL auf einem 32bit System entwickelt wurde? Oder liegt es daran, dass die Delphi Anwendung die auf einem x64bit System erstellt wurde, mit einem Delphi7 32bit erstellt wurde Komplikationen mit Komponenten bekommt?

Ich bin jetzt bei der Überprüfung ob die DLL auf ein Element der 32 bit-System Komponente zugreift und ggfs passe ich die .Net DLL an!

Ich bedanke mich diesbezüglich für eure Antworten.

LG