使用VS2010在客户端编译本机COM客户端存根

Mat*_*att 6 c++ com visual-studio-2010

我是COM编程的新手,并且从Visual Studio 2010创建了一个基本的本机COM服务器/客户端对.客户端和服务器项目都存在于同一个解决方案中.我想知道在客户端项目中包含生成的客户端存根和头文件最合适的方法是什么.我在我的服务器项目中创建了MIDL,当我编译项目时,_h.h,_i.c和_p.c文件在我的项目源目录中生成.

  • 我是否需要在客户端项目中编译两个.c文件?
  • 通过在客户端项目中从服务器项目的源目录添加它们作为链接文件,是在客户端项目中编译这些的最佳方法吗?
  • 有没有办法让Visual Studio知道_h.h,_i.c和_p.c文件在我修改MIDL时已经过时,或者我需要记得在我触摸任何时候重新编译服务器项目MIDL?
  • 哪里是.h文件的最佳位置 - 它可以放在服务器项目的stdafx.h文件中吗?如果是这样,将服务器项目的源目录添加到客户端项目的头包含目录中是否合适?
  • 客户端项目是否应该在服务器项目中具有"参考"(在Visual Studio参考意义上)?

另外 - 我想免费注册.除了为我的客​​户端和服务器提供清单之外,在这种情况下我还需要做些什么吗?

..

编辑

看看这里的MSDN文章:http://msdn.microsoft.com/en-us/library/windows/desktop/aa366830(v = vs.85).aspx,看来生成的文件,如果我只想要为了支持进程内无reg激活,我只需要编译_i.c并在我的客户端程序中包含_h.h文件.

dlldata.c和_p.c似乎被用来创建一个代理DLL,它通过一个远程计算机支持远程计算机(用于激活上登记?或也本地计算机,出PROC的?如果它需要本地计算机,出proc,为什么需要COM服务器的dll才能注册?COM服务器DLL与代理DLL不同,是吗?)

非常感谢,

--Matt

Han*_*ant 6

必须将生成的_p.c和dlldata.c编译为单独的项目以构建代理/存根DLL.只有当您在公寓或流程中调用电话时,您并不总是需要一个.

生成的_i.c文件提供GUID值.将其编译到服务器和代理/存根中.将其编译到客户端是可以的,但使用__uuidof关键字是最简单的.

生成的_i.h文件包含接口和coclass声明.您需要在服务器和客户端中#include它.

更改.idl时,Midl.exe应自动重新生成这些文件.这反过来确保重建客户端,服务器和代理/存根.

stdafx.h很好,是的include目录.

在"引用"上没有,客户端和服务器没有链接依赖性.

您必须为reg-free com编写清单并将其嵌入客户端.