Jesteśmy bliscy napisania usługi internetowej w języku C#, która ujawni funkcjonalność zawartą w natywnej aplikacji GUI Delphi. Dlaczego miałbym wybrać zawijanie kodu Delphi w rodzimej bibliotece dll i dlaczego miałbym chcieć opakować go w serwer COM? Innymi słowy: jakie czynniki należy wziąć pod uwagę przy wyborze jednego z nich? Interesują mnie czynniki związane z kodowaniem, debugowaniem, (zautomatyzowanym) testowaniem, wdrażaniem (instalacja u klientów) i wydajnością (narzut?).Dlaczego miałbym raczej używać natywnego dll lub serwera com do wywoływania kodu Delphi z C#?
Odpowiedz
COM dodaje kilka istotnych zalet w stosunku do zwykłego DLL:
- Wsparcia dla OOP (klas, interfejsów)
- automatycznego zarządzania pamięcią na smyczki (
BSTR
), tablic i obiektów (poprzez interfejsy) - Nie ma potrzeby korzystania z wywoływania platformy po stronie .NET
Więc chciałbym wybrać COM.
Aby użyć klasy Delphi w .NET przy użyciu biblioteki DLL, musisz spłaszczyć klasę po stronie Delphi i przewinąć ją po stronie .NET, co jest dość brzydkie.
Wiele artykułu Rudy w sprawie Delphi i C++ kod C# dotyczy także:
Dobre punkty, dzięki. Czy widzisz jakieś wady korzystania z COM (oprócz konieczności rejestracji serwera COM podczas instalacji)? –
Zwykły DLL może ujawnić wskaźnik interfejsu klientowi w taki sam sposób, jak robi to serwer COM. – OnTheFly
W nowszych wersjach systemu Windows dostępna jest również wersja bez rejestracji. –
- 1. Jak używać IDispatch w zwykłym C do wywoływania obiektu COM
- 2. Wywołanie C# z natywnego C++, bez/clr lub COM?
- 3. Dlaczego miałbym używać Powershell przez C#?
- 4. Dlaczego miałbym używać funkcji rozbieżnych?
- 5. Jak załadować i używać natywnego kodu c w projekcie lein?
- 6. Oddzwonienie z dll Delphi do C# app
- 7. Reverse PInvoke z natywnego C++
- 8. Jak używać COM dll w moim programie C++
- 9. Three.js przeniesiony do natywnego kodu?
- 10. Kompilowanie Java do kodu natywnego?
- 11. Dlaczego miałbym kiedykolwiek używać DoublyLinkedList w PHP?
- 12. Wydajność wywoływania niezarządzanego kodu z kodu zarządzanego
- 13. Używanie natywnego kodu C++ w c # - problem ze std :: vector
- 14. Jak używać zestawu .Net w Delphi bez rejestrowania go w GAC lub COM?
- 15. Dlaczego nie miałbym używać npm do instalacji przędzy?
- 16. Zwracanie ciąg z DLL Delphi C# rozmówcy w 64 bit
- 17. Debuguj C# dll z rozwiązania C++ przez COM
- 18. Kiedy używać Cygwin lub MinGW do kompilowania kodu C?
- 19. Wywołanie C# dll z niezarządzanej aplikacji C++ bez COM
- 20. Jak ustalić, czy DLL to COM lub .NET?
- 21. Jak używać zewnętrznego "C" do wywoływania funkcji C++ w C
- 22. Jak mogę przekazać ciąg znaków Delphi do biblioteki DLL Prism?
- 23. C++ Builder lub Visual Studio dla natywnego programowania C++?
- 24. Różnica między tradycyjnym DLL DLL i COM
- 25. Używanie biblioteki DLL Delphi w C#
- 26. Konwersja interfejsu obiektu COM z C na Delphi
- 27. Konwencja wywoływania COM na x64
- 28. Używanie tlbexp.exe na dll COM
- 29. Co to są przejściowe atrybuty factory_girl? Dlaczego miałbym go używać?
- 30. Załadować dll COM w czasie wykonywania?
Czy nie można po prostu re-write funkcjonalności w C#? Brzmi jak koszmar utrzymania! – Belogix
To brzmi jak koszmarny projekt, czy kod delphi jest w exe czy podzielony na biblioteki? W każdym razie, serwery COM wymagałyby instalacji na kliencie, gdzie biblioteka C musiałaby być po prostu dołączona do reszty plików. – CurlyPaul
@Bogogix: To może być/jest celem końcowym, ale w tej chwili nie jest opcją ograniczenia czasowe, w których jesteśmy. Alternatywą byłoby stworzenie usługi internetowej Delphi, ale dostępność programistów mówi, że musimy przejść w stronę C#. –