3

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

我可以通过调用来编译项目

CoInitialize(NULL);
CoCreateInstance(stuff);

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

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

老实说,我不确定还能尝试什么。

4

2 回答 2

2

一个IDL 文件(接口定义文件)没有为它上面声明的类型提供任何实现;它只指定如何与在实现IDL 文件的 DLL 中编码的类进行通信。

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

于 2011-07-21T22:45:43.737 回答
2

IDL 文件定义接口,而不是实现。如果从字面上看,您拥有的这个第三方组件只是一个 IDL 文件,那么您就没有任何可以注册的东西。

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

于 2011-07-21T22:47:23.937 回答