Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用VS2010在客户端中编译本机COM客户端存根_C++_Visual Studio 2010_Com - Fatal编程技术网

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

C++ 使用VS2010在客户端中编译本机COM客户端存根,c++,visual-studio-2010,com,C++,Visual Studio 2010,Com,我是COM编程新手,从VisualStudio2010创建基本的本机COM服务器/客户端对。客户端和服务器项目都位于同一个解决方案中。我想知道最合适的方法是在客户机项目中包含生成的客户机存根和头文件。我已经在我的服务器项目中创建了MIDL,当我编译该项目时,_h.h、_I.c和_p.c文件将在我的项目源目录中生成 我是否需要在客户端项目中编译这两个.c文件 在客户端项目中编译这些文件的最佳方法是将它们作为链接文件从服务器项目的源目录添加到客户端项目中吗 当我修改MIDL时,VisualStud

我是COM编程新手,从VisualStudio2010创建基本的本机COM服务器/客户端对。客户端和服务器项目都位于同一个解决方案中。我想知道最合适的方法是在客户机项目中包含生成的客户机存根和头文件。我已经在我的服务器项目中创建了MIDL,当我编译该项目时,_h.h、_I.c和_p.c文件将在我的项目源目录中生成

  • 我是否需要在客户端项目中编译这两个.c文件
  • 在客户端项目中编译这些文件的最佳方法是将它们作为链接文件从服务器项目的源目录添加到客户端项目中吗
  • 当我修改MIDL时,VisualStudio是否有办法知道_h.h、_i.c和_p.c文件已过期,或者我是否需要记住在任何时候触摸MIDL时重新编译服务器项目
  • .h文件的最佳存放位置在哪里?它可以放在服务器项目的stdafx.h文件中吗?如果是这样,将服务器项目的源目录添加到客户端项目的头include目录是否合适
  • 客户端项目是否应该对服务器项目具有“引用”(在VisualStudio引用的意义上)
另外,我想免费注册。在这种情况下,除了为我的客户机和服务器提供清单之外,我还需要做什么

编辑

看看这里的MSDN文章:,似乎在生成的文件中,如果我只想支持in-proc reg免费激活,我只需要编译_I.c并将_h.h文件包含在我的客户端程序中

dlldata.c和_p.c似乎用于创建代理DLL,该DLL支持在远程计算机上注册(对于远程计算机激活?或者本地计算机,进程外激活?如果本地计算机需要,进程外激活,为什么需要它,因为COM服务器的dll已注册?COM服务器dll与代理dll不同,是吗?)

非常感谢


--Matt

生成的_p.c和dlldata.c必须编译到单独的项目中,以构建代理/存根DLL。您并不总是需要代理/存根DLL,只有在跨单元或进程封送调用时才需要

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

生成的i.h文件包含接口和coclass声明。您需要将其包含在服务器和客户端中

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

在include目录中,stdafx.h可以,是的

否在“引用”上,客户端和服务器没有链接依赖关系


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

谢谢Hans,我很感激。为了澄清-如果我在服务器上的单个进程中在MTA和STA之间封送,我是否需要代理/存根DLL?如果是,我在这里做什么-我是否将_p.c和dlldata.c构建到单独的项目中,并使用我的客户端和服务器之间没有任何引用?另外,你能给我指一下uuuid关键字上的页面或资源吗?我找到了,是吗?如果是,它从客户端的何处获取此信息-在编译期间从reg free清单中获取?是和是。部署并注册CLSID和接口密钥。它是uuuidof,它是deri为什么不直接导入tlb呢?