Книга: C# для профессионалов. Том II
TlbImp.exe
TlbImp.exe
Опасно ли для RCW, созданной IDE VS.NET, иметь такое же имя, как и исходная DLL COM? В конце концов, если приложение переносится с одной машины на другую, будет очень легко спутать RCW с DLL COM, которую он заворачивает, и случайно перезаписать файл DLL COM. Или можно по ошибке попытаться зарегистрировать RCW в службах COM, удивляясь, почему программа регистрации (regsvr32.exe
) не работает.
Чтобы избежать таких проблем, попробуйте воспользоваться напрямую утилитой TlbImp.exe
. Поставляемая вместе с SDK .NET эта исполняемая программа специализируется на создании прокси .NET для DLL COM. Так как она вызывается из командной строки, можно задать TlbImp.exe
с аргументом командной строки out
, чтобы получающийся RCW имел имя, отличное от имени DLL COM.
TlbImp
является сокращением от Type Library Importer (Импортер библиотеки типов). При выполнении этой программы с DLL COM она запрашивает библиотеку типов DLL COM и транслирует информацию оттуда в формат .NET, преобразуя стандартные типы данных COM в типы, распознаваемые .NET. После выполнения TlbImp.exe
для DLL COM, файл вывода (RCW) просто помещается в папку исполняемого файла клиента, который будет его использовать. (Это дополнительный шаг, который необходим при явном использовании TlbImp.exe
вместо диалогового окна References в IDE.) В приведенном выше примере TlbImp.exe выполняется с DLL COM, которая находится в той же папке, что и TlbImp
, но TlbImp.exe
работает, как любая другая утилита командной строки, т.е. можно определить файл в другой папке с помощью абсолютного или относительного пути доступа.
В заключение пара предупреждении о TlbImp.exe
и RCW. Первое: не забывайте задавать аргумент out
при использовании TlbImp.exe
. Если не сделать этого, то программа TlbImp.exe
будет заявлять, что она не может перезаписать исходный файл:
Второе: помните, что хотя RCW служит в качестве посредника между компонентом COM и клиентом .NET, который его вызывает, по-прежнему всю реальную работу делает компонент COM. То есть необходимо выполнить те же требования к развертыванию компонента COM, которые пришлось бы сделать, если бы он использовался напрямую. Это означает, что завернутый компонент COM тем не менее надо регистрировать в службах COM. Если попробовать сослаться на незарегистрированный компонент COM, то IDE VS.NET будет порождать ошибку.
Чтобы справиться с этой проблемой, понадобится, конечно, программа регистрации COM — regsvr32.exe
. Ее можно вызвать из диалогового окна Windows Run, которое доступно из меню Start рабочего стола.
Поэтому не забывайте регистрировать компоненты COM.
- Тестирование Web-сервиса XML с помощью WebDev.WebServer.exe
- 9.1.4.2. Функции-оболочки: execl() и др.
- 2.3 Executable and Linking Format
- Диски С: и D: невозможно открыть простым щелчком кнопки мыши. Появляется сообщение Не найден файл file.exe. Что делать?
- 17.1 Что такое deb-пакеты, или куда девались exe
- 9.4.3.1. Флаг close-on-exec
- 2.15. Exeel и Access в повседневной работе
- Семейство функций exec()
- 3.2.3 Using mutexes for atomicity
- CHAPTER 33 Writing and Executing a Shell Script
- 2.3.6. Execution Contexts
- 7.2.4. Execution Context