Как создать библиотеку типов из неуправляемой com dll
Я должен использовать стороннюю, неуправляемую com dll в моем приложении .NET. Мне нужно изменить эту сборку, чтобы создать пользовательские RCW. Для того, чтобы Редактировать Сборку Взаимодействия мне нужна библиотека типов конкретной сборки. Может ли кто-нибудь объяснить мне, как создать библиотеку типов из неуправляемой com dll?
в regsvr32 нет опции для создания библиотеки типов.
спасибо, с уважением, Робо.
5 ответов
Если все, что вы пытаетесь сделать, это создать сборку взаимодействия из собственной dll (и собственная DLL встраивает TLB в качестве ресурса), вы можете просто вызвать tlbimp непосредственно в dll:
tlbimp Foo.dll /out:Interop.Foo.dll
который будет генерировать взаимодействия.Foo.файл DLL. Затем вы можете использовать ildasm для изменения IL:
ildasm Interop.Foo.dll /out=Foo.il
вам понадобится Ole-COM Object Viewer, доступный как часть того, что является последним Windows SDK. Затем вы можете перейти в File - >View Type Lib и сохранить IDL в текстовый файл. Тогда вы можете использовать мидл (также часть Windows SDK) для регенерации TLB и файла заголовка. Что-то вроде этого должно сделать для основных случаев:
midl /out c:\temp /header MyHeader.h MyIDLFile.idl
Если все, что у вас есть, это COM DLL, вы не можете создать библиотеку типов. Библиотека типов описывает реализованные com-интерфейсы. Но неуправляемая COM DLL просто должна выставить DllGetClassObject
. Это только получает вас IClassFactory
, что позволяет создавать новые объекты, если вы знаете правильный тип спереди.
Если typelib встроен в ресурсы DLL, и сам файл TLB является тем, что требуется, то стороннее программное обеспечение может извлечь его (Хотя, как указывали другие, это может быть не самым желательным вариантом).
Е. Г. используя Хакер Ресурсов:
- откройте файл DLL.
- перейдите к узлу TYPELIB\1\1033 (или что-то еще) в представлении дерева.
- в меню выберите действие - > Сохранить Ресурс в двоичном виде файл...
- выберите имя файла и дайте ему.Расширение TLB.
теперь вы можете ссылаться на это .TLB-файл и сборка без необходимости оригинальной DLL, например
#import "test.tlb" named_guids
Visual Studio IDE может напрямую извлекать двоичные ресурсы из неуправляемых .exe и .DLL-файл. Если библиотека типов сохраняется как двоичный ресурс в не удалось COM DLL (например, один, построенный с использованием VS native C++ compiler), вы можете извлечь его следующим образом:
- открыть .dll файл в VS редактор ресурсов (редактор по умолчанию при открытии исполняемых файлов).
- перейдите к ресурсу библиотеки типов (
"TYPELIB"
, потом1
) в дереве ресурсов. - щелкните правой кнопкой мыши на ресурсе библиотеки типов и выберите
export
. Это вызывает диалоговое окно "Сохранить файл как". - в поле" Сохранить файл как " измените имя файла по умолчанию (обычно
bin1.bin
) что-то вродеMyLibrary.tlb
и нажмите Ok. - подтвердите, открыв экспортированный .файл TLB с
OleView.exe
(результаты должны выглядеть идентично тем, которые вы видите, открыв .dll сOleView.exe
).
для извлечения библиотеки типов из управлял DLL (например, те, которые построены с использованием C#), VS включает в себя инструмент Tlbexp.exe
(запустите его из командной строки VS):
https://msdn.microsoft.com/en-us/library/hfzzah2c (v=против 110).aspx