Нужна ли мне 64-разрядная версия stdvcl40.dll?

Я собираюсь развернуть 64-битную версию OCX, написанную на Delphi. Для OCX требуется, чтобы stdvcl40.dll была доступна и зарегистрирована в целевой системе. Насколько мне известно, в моей установке Delphi присутствует только 32-битная версия, но, поскольку исходные коды доступны, я смогу создать 64-битную версию самостоятельно.

Есть ли в этом необходимость или преимущество, или мне следует придерживаться содержащейся версии и развертывать только ее?

Правка Просто немного предыстории: StdVCL40.dll в основном содержит библиотеку типов, предоставляющую доступ к трем интерфейсам, объявленным в System.Win.StdVCL.pas. Более поздние версии этой dll также реализуют некоторые страницы свойств, обрабатывающие эти интерфейсы.

В результате удаления зависимости от stdvcl40.dll эти интерфейсы (в моем случае IString) больше не доступны в моей библиотеке типов, а любая ссылка заменяется на IDispatch.

stdvcl40.dll не является пакетом времени разработки, и его приходилось развертывать вместе с большинством моих библиотек ActiveX в предыдущих версиях Delphi. Я должен развернуть его, потому что в противном случае OCX вообще откажется регистрироваться.

На самом деле кажется, что он работает и с 64-битной версией моего OCX, вероятно, потому, что Windows COM достаточно умен, чтобы понять, что 64-битной версии нет, и поэтому использует 32-битную версию. Хотя я не уверен, что это правильный путь. Таким образом, мой вопрос.


person Uwe Raabe    schedule 25.06.2014    source источник
comment
StdVclXX.dll — это распространяемая библиотека DLL, указанная в руководстве по развертыванию для более старых версий Delphi. Но насколько я могу судить, в современном Delphi он больше не нужен. В руководстве по развертыванию его больше нет.   -  person David Heffernan    schedule 25.06.2014
comment
@DavidHeffernan, в основном он определяет только некоторые интерфейсы (IStrings, IProvider, IDataBroker), из которых я фактически использую IStrings. Что меня беспокоит, так это то, что она автоматически включается при создании новой библиотеки ActiveX — даже в XE6.   -  person Uwe Raabe    schedule 25.06.2014
comment
Возможно, это просто исторический момент, и они забыли удалить его из нового шаблона проекта. Вы пытались удалить какие-либо ссылки на stdvclxx из проекта?   -  person David Heffernan    schedule 25.06.2014
comment
@DavidHeffernan, когда я удаляю зависимость от stdvcl40 из библиотеки типов, все ссылки на IString заменяются на IDispatch. Хотя я мог бы найти обходной путь в моем случае, объявив IStrings в моей собственной библиотеке типов, похоже, что stdvcl40 не так уж устарел.   -  person Uwe Raabe    schedule 25.06.2014
comment
@KenWhite, запустите свою XE6 IDE (вероятно, подойдет и более низкая) и создайте новую активную X-библиотеку. Сохраните и проверьте файл RIDL, и вы должны увидеть что-то вроде importlib(stdole2.tlb); importlib(stdvcl40.dll);. Внутри редактора typelib объявляем новый интерфейс, добавляем метод с параметром типа IStrings. Тогда у вас есть эта зависимость. Тот же механизм, который позволяет использовать, скажем, IFont или IBitmap из stdole2.tlb, делает IString доступными из stdvcl40.dll.   -  person Uwe Raabe    schedule 25.06.2014
comment
@Уве: Спасибо. Это полезная информация. :-)   -  person Ken White    schedule 25.06.2014


Ответы (1)


Я предполагаю, что эта DLL используется в качестве хранилища только для библиотеки типов (с определением IStrings и т. д.), по крайней мере, в вашем случае. И тогда ответ «НЕТ», вам не нужна версия x64. Когда вы регистрируете эту DLL x32, библиотека типов должна быть доступна для обоих приложений x32/x64. К сожалению, я не могу проверить это сейчас, так что это только предположение.

ОБНОВЛЕНИЕ Вы можете зарегистрировать stdvcl40.tlb (его размер всего 3 КБ, поэтому его намного проще развернуть), тогда ваш OCX будет зависеть от "stdvcl40.tlb" вместо "stdvcl40.dll" ( возможно, вам придется снять отметку с DLL и проверить TLB на вкладке «Использование» редактора библиотеки типов, но я не уверен, что это необходимо, но в моем тестовом проекте у меня больше нет зависимости от DLL).

person Andrei Galatyn    schedule 25.06.2014
comment
Почему он должен быть доступен как для приложений x86, так и для x64? У них отдельные реестры. - person David Heffernan; 25.06.2014
comment
@David Дэвид Я думаю, что нет библиотек типов x32/x64, потому что это не исполняемый файл. Сама DLL будет зарегистрирована как x32, но она будет регистрировать встроенную библиотеку типов, и я полагаю, что она стала доступной для любого (x32/x64) приложения в системе. Я обновил свой ответ комментарием, как избежать зависимости от stdvcl40.dll. - person Andrei Galatyn; 25.06.2014
comment
@Uwe, вы пытались развернуть 32-битную версию и зарегистрировать ее. Возможно, Андрей прав. Хотя я не совсем уверен, как 64-битное приложение видит реестр com 32-битного компонента. Но, возможно, это происходит. - person David Heffernan; 25.06.2014
comment
@David: Только что проверил, stdvcl40.tlb зарегистрирован в обеих ветвях, computer\hkey_classes_root\wow6432Node\Typelib и computer\hkey_classes_root\TypeLib, поэтому этого должно быть достаточно для регистрации автономного TLB. Но при регистрации DLL он должен регистрировать TLB таким же образом. - person Andrei Galatyn; 25.06.2014
comment
@AndreiGalatyn, спасибо за совет tlb. Попробую прямо завтра утром. - person Uwe Raabe; 25.06.2014