我正在通过互联网教程学习 COM(http://www.codeguru.com/cpp/com-tech/activex/tutorials/article.php/c5567/Step-by-Step-COM-Tutorial.htm)。首先是创建一个 IDL 文件并编译它以创建另外 5 个文件。详情如下:
- 打开VS2010
- 创建 Win32 DLL 项目名称 AddObj
添加包含内容的 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,但没有任何变化。