Невозможно зарегистрировать библиотеку типов - PullRequest
0 голосов
/ 19 июня 2020

Это в Delphi XE7. У меня была существующая библиотека типов (для Dynami c Virtual Channels - на стороне клиента), и мне нужно было добавить метод в интерфейс, чтобы приложение на стороне клиента могло взаимодействовать с dll для отправки сообщений по виртуальному каналу. Я создал новый интерфейс, получил новый GUI для него, изменил файл .idl (Windows SDK предоставляет файл tsvirtualchannels.idl в Windows SDK ).

Я использовал midl для создания библиотеки типов .tlb из .idl, а затем запустил tlibimp ( Утилита Embarcadero ) для создания delphi -tlb.pas

Мой Delphi класс реализует новый метод. Но новый интерфейс не был зарегистрирован с Windows, и все попытки использовать Embarcadero tregsvr (, работающий в командной строке с повышенными привилегиями ) для регистрации библиотеки завершились неудачно с сообщением Ошибка доступа к реестру OLE

Я попытался зарегистрировать новый интерфейс вручную. Я создал свой интерфейс, аналогичный IWTSListener, и просмотрел реестр, нашел этот ключ, экспортировал его, затем изменил имя интерфейса на мое и GUID на новый GUID, а затем повторно импортировал его. Всего было четыре экземпляра.

Когда запускается клиентская dll, она запускает внепроцессный сервер и передает ему Agile Ссылку (интерфейса клиентской библиотеки DLL. Ссылка agile показывает, как приложение MTA может поговорить с STA). Однако, когда я запрашиваю интерфейс, чтобы получить мой новый интерфейс, я получаю интерфейс не поддерживается .

Я более или менее отказался от tregsvr. Он не содержит подробностей об ошибках. Есть ли что-нибудь еще, что мне нужно сделать для регистрации нового интерфейса?

Мне пришло в голову, что есть одна или две вещи, которые могут помешать этому курсу действий:

  1. Я не менял основной интерфейс dll с IWTSPlugin на IWTSPlugin2. Будет ли Windows (то есть msts c) использовать IWTSPLUGIN2 для виртуальных каналов? Добавление к нему нового интерфейса без его изменения - смертный грех ( Я знаю - mea culpa ) .

1 Ответ

0 голосов
/ 26 июня 2020

В конце концов, я решил эту проблему. Власти добавили политику в Windows, чтобы tregsvr не регистрировал библиотеку типов для всех пользователей, только если у нее есть параметры -t - c для регистрации ее для текущего пользователя. Когда я узнал об этом, было слышно много бормотания ...

...