1

我正在通过互联网教程学习 COM(http://www.codeguru.com/cpp/com-tech/activex/tutorials/article.php/c5567/Step-by-Step-COM-Tutorial.htm)。首先是创建一个 IDL 文件并编译它以创建另外 5 个文件。详情如下:

  1. 打开VS2010
  2. 创建 Win32 DLL 项目名称 AddObj
  3. 添加包含内容的 IAdd.idl 文件

    导入“unknwn.idl”;

    [ object, uuid(1221db62-f3d8-11d4-825d-00104b3646c0), helpstring("接口IAdd用于实现超快加法算法") ]

    接口 IAdd : IUnknown { HRESULT SetFirstNumber(long nX1);

    HRESULT SetSecondNumber(long nX2); HRESULT DoTheAddition([out,retval] long *pBuffer); };

    [ uuid(3ff1aab8-f3d8-11d4-825d-00104b3646c0), helpstring("Code Guru 算法实现接口。") ] 库 CodeGuruMathLib { importlib("stdole32.tlb"); importlib("stdole2.tlb");

    接口 IAdd;}

之后,按照教程,如果我编译 IAdd.idl 文件,它将生成:

--IAdd.h 包含 C++ 风格的接口声明。

--dlldata.c 包含代理 DLL 的代码。在不同的进程/计算机上调用对象时很有用。

--IAdd.tlb 二进制文件,具有良好定义的格式,完全描述了我们的接口 IAdd 以及它的所有方法。该文件将分发给我们 COM 组件的所有客户端。

--IAdd_p.c 包含代理 DLL 的编组代码。在不同的进程/计算机上调用对象时很有用。

--IAdd_i.c 包含接口 IID

但是当我通过右键单击它并在快捷菜单中选择编译来编译 IAdd 时,没有生成文件。但是当打开视图类时,我可以看到带有某种方法的 IAdd 接口。

我也尝试通过从互联网下载 midl.exe 并在命令行中运行手动编译它,但它失败了。

我对谷歌的很多材料都很好,所有人都说我可以通过 Visual Studio 编译 idl 文件,但我尝试了很多次,在我的两台计算机上但在我编译 idl 文件后没有生成文件。我还安装了新的 Win7,新的 Visual Studio 2010 Ultimate,但没有任何变化。

4

1 回答 1

3

我刚刚创建了一个新项目并使用您指定的代码创建了一个新的 idl 文件。如果我右键单击并选择编译它就可以正常工作(VS2010 Ultimate)。
您是否在 VS 的文件属性中选择了正确的文件类型?它应该是“IDL 文件”。

您是否在尝试手动编译时使用过 VS 命令提示符?
(VS 命令提示符将设置所有必要的环境变量)

于 2012-05-23T12:24:44.187 回答