将dll文件导入另一个IDL文件
Import a dll file into another IDL file
我正在为visual C++中的给定组件开发代理COM组件。如果"Comp"是原始组件,而Proxy_Comp是代理组件,那么Proxy_Comp应该能够具有与原始组件相同的接口。
我认为这应该通过只导入"Comp.dll"来完成。我的一个朋友以前成功地做到了这一点。但我做不到。有人能帮忙吗?
我假设您谈论的是IDL文件中的importlib指令。它需要一个类型库,文件扩展名为.tlb。它是一个二进制文件,通过在.idl文件上运行midl.exe生成,该文件包含紧凑形式的.idl定义。
DLL不是类型库。然而,在COM Automation中,将COM服务器的类型库作为资源嵌入DLL是一种常见的约定。将服务器代码及其接口定义放在一起非常方便。您可以从Visual Studio中轻松地看到这一点,使用"文件+打开+文件"并选择DLL。您可以选择c:\windows\system32\shell32.dll作为示例。
资源类型名称总是"TYPELIB",打开节点查看资源ID,总是"1"。您可以双击它来查看内容,这不是很有趣,因为它只是一个十六进制转储。不过,您将识别字符串、接口的名称、coclass及其成员。
关闭该窗口并右键单击"1",注意"导出"上下文菜单选项。这可以让你在磁盘上写一个文件,命名为.tlb。你现在就有了importlib()指令喜欢的.tlb的精确副本。
可以依次对.tlb进行反编译,以重新生成原始.idl文件。启动Visual Studio提示。运行oleview.exe,File+Open Typelib,然后选择.tlb。将焦点设置在右侧窗格,键入Ctrl+A、Ctrl+C,然后将其粘贴到文本编辑器中。现在您得到了原始的.idl,您可以使用import指令。
只有当原始.idl文件是COM Automation干净的并且不包含任何cpp_quote时,它才具有100%的保真度。
您需要类型库中的接口定义(嵌入DLL中的.tlb数据)。如果您安装了Windows SDK实用程序(可能与VS一起安装),则为DLL运行OLE/COM对象查看器和"文件"、"查看类型库"。这将为您提供一个IDL转储,您可以从中复制接口定义。
(如果您想要的是在IDL编译时导入.tlb数据,也可能有一种方法,但我不确定,对不起。)
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 为什么以及如何从接口定义语言 (IDL) 生成头文件
- 致命错误C1083在IDL文件上使用OPENDDS_IDL工具时
- IDL文件-静态链接或动态链接
- 在Visual Studio 2010中编译IDL文件时无法生成必要的文件
- IDL文件和C++头文件中的defaultvalue和retval参数排序
- 当从视觉工作室中的 IDL 文件生成 CPP 代码时,如何删除属性"in"的"const"?
- 将dll文件导入另一个IDL文件
- 将idl文件导入Visual Studio (c++)
- 仅用IDL文件注册COM对象