如何在 VS C++ 中使用 .tlb 类型创建接口方法?
Posted
技术标签:
【中文标题】如何在 VS C++ 中使用 .tlb 类型创建接口方法?【英文标题】:How do I create interface methods using .tlb types in VS C++? 【发布时间】:2011-01-29 05:42:22 【问题描述】:背景:
-
.TLB 文件包含用语言“X”编写的接口。我没有 .h、.idl、.tlh 或任何其他头文件 - 只有 .TLB 文件。语言“X”不导出兼容的 .h、.idl 等。
我使用 VS 向导将 ATL 简单对象添加到我的 ATL 项目中。
我想向我的简单 ATL 对象的接口添加一个方法,该对象使用 .TLB 定义的类型之一作为参数。
// Something like the following in the .idl file:
interface ISomeInterface : IUnknown
HRESULT SomeMethod([in] ITypeFromTLB* aVal); // ITypeFromTLB declared in .TLB file.
;
我该怎么做?我希望有一个向导,或者 .idl 接口声明中的一行可以引入 .tlb 信息。 midl 的包含(无 .tlb)、导入(无 tlb)和 importlib(仅限库)似乎没有提供解决方案(我需要代理/存根工作,所以我不能把这个在库声明中使用 importlib 命令)。
【问题讨论】:
【参考方案1】:在 cpp/h 中使用 #import 将 TLB 接口引入您的命名空间。
【讨论】:
这在 midl 编译器中不可用。 这是 C/C++ 编译器的指令,不是 MIDL 编译器的指令。把它放在你的#include之后 我需要在我的 IDL 文件中引入信息,以便我可以声明一个新接口。 #import 只会将信息带入我的 .h 和 .cpp 文件中。 使用 importlib 时哪个接口代理/存根不起作用? importlib 只能在内部库声明中使用。为了使代理/存根工作,ISomeInterface 声明必须在库声明之前。 importlib 由于其功能的限制而无法使用。【参考方案2】:在 Visual Studio 命令行上执行 oleview。然后 File -> View Type Lib,给它你的 foo.tlb 的完整路径。现在在 ITypeLib Viewer 中执行 File -> Save As .. 你可以从那里导出所有 3 个(.h、.idl、.c)。
【讨论】:
请注意,您需要以管理员身份运行oleview
才能正常工作以上是关于如何在 VS C++ 中使用 .tlb 类型创建接口方法?的主要内容,如果未能解决你的问题,请参考以下文章