仅使用IDL文件注册COM对象

时间:2011-07-21 22:37:30

标签: c++ com registration idl

我有一个第三方IDL文件,在编译时会生成一个标头和一个_i.c文件。所有这三个文件都是Visual Studio 2010项目的一部分。 (到目前为止,除了尝试COM初始化之外,项目是空的。)

我可以通过调用

来编译项目
CoInitialize(NULL);
CoCreateInstance(stuff);

在运行时CoCreateInstance()返回“未注册的类”错误。

我在互联网上找到的所有东西都说通过在DLL文件或EXE文件上运行regsvr32来注册COM对象。但是我只有一个IDL文件。我尝试注册项目生成的EXE文件,但是我收到一条错误,说该模块已“加载但未找到入口点DLLRegisterServer。”

老实说,我不确定还有什么可以尝试的。

2 个答案:

答案 0 :(得分:2)

IDL File(接口定义文件)不为其上的类型提供任何实现;它仅指定如何与在实现 IDL文件的DLL中编码的类进行通信。

IDL文件不够用,您还需要实现它的DLL。

答案 1 :(得分:2)

IDL文件定义接口,而不是实现。如果您拥有这个第三方组件的所有内容都是IDL文件,那么您无需注册任何内容。

IDL文件可能描述了您要实现第三方代码调用的接口;在那种情况下,你不会CoCreateInstance他们,他们可能会CoCreateInstance你。但是考虑到大量的信息,我倾向于你错过了实际的第三方组件,或者你把错误的东西传给了CoCreateInstance。