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. –
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#. –