2014-06-25 16 views
6

Mam zamiar wdrożyć 64-bitową wersję OCX napisaną w Delphi. OCX wymaga, aby stdvcl40.dll był dostępny i zarejestrowany w systemie docelowym. Według mojej wiedzy w mojej instalacji Delphi jest tylko wersja 32-bitowa, ale ponieważ dostępne są źródła, powinienem móc samodzielnie utworzyć wersję 64-bitową.Czy potrzebuję 64-bitowej wersji stdvcl40.dll?

Czy jest taka potrzeba, czy powinienem to zrobić, czy powinienem trzymać się zawartej wersji i wdrożyć tylko tę?

Edit Wystarczy dać trochę tła: StdVCL40.dll zawiera głównie biblioteki typów odsłaniając trzy interfejsy zadeklarowane w System.Win.StdVCL.pas. Późniejsze wersje tej biblioteki DLL również implementują niektóre strony właściwości obsługujące te interfejsy.

Wynikiem usunięcia zależności od stdvcl40.dll jest to, że te interfejsy (IStrings w moim przypadku) nie są już dostępne w mojej bibliotece typów, a wszelkie odniesienia są zastępowane przez IDispatch.

stdvcl40.dll nie jest pakietem czasu projektowania i musiał zostać wdrożony wraz z większością moich bibliotek ActiveX w poprzednich wersjach Delphi. Muszę go wdrożyć, ponieważ w przeciwnym razie OCX odmawia rejestracji.

Wygląda na to, że działa również z 64-bitową wersją mojego OCXa prawdopodobnie dlatego, że Windows COM jest na tyle sprytny, że nie ma wersji 64-bitowej, a zatem przyjmuje wersję 32-bitową. Chociaż nie jestem pewien, czy to jest droga. Tak więc moje pytanie.

+0

StdVclXX.dll to redystrybucyjna biblioteka DLL wymieniona w przewodniku po wdrożeniu dla starszych wersji Delphi. Ale o ile mogę powiedzieć, nie jest już potrzebny w nowoczesnym Delphi. Przewodnik wdrażania już go nie wymienia. –

+0

@DavidHeffernan, w zasadzie definiuje tylko niektóre interfejsy (IStrings, IProvider, IDataBroker), z których faktycznie korzystam z IStrings. Martwi mnie to, że jest automatycznie uwzględniany przy tworzeniu nowej biblioteki ActiveX - nawet w XE6. –

+0

Być może jest to po prostu historyczne i zapomnieli usunąć go z nowego szablonu projektu. Czy próbowałeś usunąć wszelkie odwołania do stdvclxx z projektu? –

Odpowiedz

2

Domyślam się, że ta biblioteka DLL jest używana jako pamięć dla biblioteki typów (z definicją IStrings itp.), Przynajmniej w twoim przypadku. A następnie odpowiedź brzmi "NIE", nie potrzebujesz wersji x64. Po zarejestrowaniu tej biblioteki DLL x32, biblioteka typu powinna być dostępna dla obu aplikacji x32/x64. Niestety, nie mogę tego teraz sprawdzić, więc to tylko domysły.

UPDATE Można zarejestrować stdvcl40.tlb (to tylko 3KB wielkości, więc jest to znacznie łatwiejsze do wdrożenia), wówczas OCX zależeć będzie od „stdvcl40.tlb” zamiast „stdvcl40.dll” (może będziesz musiał odznaczyć DLL i sprawdzić TLB z zakładki "Używa" edytora biblioteki typów, ale nie jestem pewien, czy jest to konieczne, ale w moim projekcie testowym nie mam już zależności od biblioteki DLL).

+0

Dlaczego byłby dostępny dla aplikacji x86 i x64? Mają oddzielne rejestry. –

+0

@David Myślę, że nie ma bibliotek typów x32/x64, ponieważ nie jest to plik wykonywalny. Sama DLL zostanie zarejestrowana jako x32, ale zarejestruje zintegrowaną bibliotekę typów i uważam, że stała się dostępna dla każdej aplikacji (x32/x64) w systemie. Zaktualizowałem swoją odpowiedź komentarzem, jak uniknąć zależności od stdvcl40.dll. –

+0

@Uwe spróbowałeś wdrożyć 32-bitową wersję i zarejestrować ją. Może Andrei ma rację. Chociaż nie jestem do końca pewien, jak aplikacja 64-bitowa widzi rejestr 32-bitowego komponentu. Ale może tak się dzieje. –

Powiązane problemy