In unserem Projekt verwenden wir viel von Delphi-Code durch COM in unserer asp.net-Anwendung.Warum ist COM-Interop gegenüber P/Invoke in .NET vorzuziehen?
Gefallen Sie diesen: Legacy delphi dll => delphi COM-Wrapper => .NET-Interop => asp.net (MVC)
Wir haben einige Probleme in Bezug auf Zugriffsverletzungen, Entladen der DLL, etc ... Ich habe jetzt portierte einige, die Legacy-DLL direkt über P/Invoke-Code zu verwenden.
Wenn ich auf Ressourcen in Bezug auf COM und P/Invoke schaue, raten Leute fast immer, COM zu verwenden. Warum das? Nicht P/Invoke haben die folgenden Vorteile:
- geprüft Code heraus wird immer die richtige DLL statt der zuletzt registrierten COM
- Mehrere Versionen können nebeneinander auf den Servern (zum Beispiel laufen : DEV, TEST und QA) Kommunikation
- nicht mehr COM-Registrierungen Aufwand
- Viele schneller als COM (Artikel I 30% Geschwindigkeitserhöhung zeigen)
können Sie p/aufrufen in eine 32-Bit-DLL-Datei von einem 64-Bit-Prozess? Ich denke nicht. – Bond
Könnten Sie einige Hinweise geben, die darauf hindeuten, dass COM P/Invoke bevorzugt wird? Ich stimme Ihnen sehr zu, dass P/Invoke die bessere Lösung ist, wenn sie verfügbar ist. Die meisten Interna in der .NET-BCL sind in Bezug auf P/Invoke auf die Win32-APIs implementiert. Der einzige Grund, COM Interop zu verwenden, ist, wo Sie keine Wahl haben, z.B. Interop mit Office-Anwendungen oder Windows-API-Teile, die nur COM sind. – Govert
Remember DLL Hölle? Anstatt die richtige DLL zu verwenden, verwendet Ihr Code die erste verfügbare DLL mit dem gleichen Namen. Alle API-Änderungen werden erst zur Laufzeit erkannt, so dass eine Versionierung praktisch unmöglich ist. Sie können keine DLL erstellen, die sowohl ältere als auch neuere Clients bedient, ohne die Namen der Funktionen selbst zu ändern. –