在VS 2008中构建代理/存根dll

4

我有一个从VC6迁移到VS 2008的ATL COM项目。如何在VS2008上构建PS DLL?

在VS 2008中,新的ATL项目有一个单独的PS项目来构建PS DLL。但是从VC6迁移没有创建此项目。

我尝试在PS mk文件上调用nmake,但这会导致一个枚举类型的重定义错误,该枚举类型存在于我们的源文件以及自动包含的Windows头文件中。在解决方案中,我们通过定义WIN32_LEAN_AND_MEAN预处理器来解决了这个问题,它排除了不必要的头文件。我可以在使用nmake时做同样的事情吗?

还有其他创建PS DLL的方法吗?

2个回答

3
Eran提出的建议似乎很合理,但我找不到他所说的一些内容。因此,我尝试了不同的方法。
我在VS 2008中创建了一个空的ATL(服务器)项目。这会自动创建一个ps项目和普通的atl项目。
我将ps项目的vcproj文件复制到我的项目文件夹中,并将其重命名为myprojectname ps.vcproj。
然后,我打开了我的解决方案,并将新复制的项目添加到其中。我在VS 2008中将项目重命名为myprojectname ps,并删除了已包含在其中的所有文件。
接下来,我将我的 _i.c,_p.c,dlldata.c 和 .def 文件包含到该项目中。在设置中,选择链接器 > 输入 > 模块定义文件,并添加我的def文件名称。
就是这样!非常好用。

创建ATL COM EXE服务器项目时,请不要勾选“允许合并代理/存根代码”选项。代理+存根可以存在于单独的DLL中,因此这个选项似乎是有意义的。但它实际上不会生成任何代理存根项目。 - peterchen

1

我已经有一段时间没有做这个了,即使那时我也没有最新的指令,但现在回顾项目,我会尝试重构过程:

  1. 为PS创建一个新的空DLL项目。不需要MFC或ATL。
  2. 将以下文件添加到项目中:proj_h.h、proj_i.c、proj_p.c、proj.def、dlldata.c
  3. 在项目设置中,将以下库添加到附加依赖项中:rpcndr.lib、rpcns4.lib、rpcrt4.lib
  4. 在项目设置中,将def文件指定为您的模块定义文件。
  5. 在项目设置中,将“生成无桩代理”设置为是。
  6. 在项目设置中,将tlb文件设置为服务器项目生成的文件。

这是我从我的一个项目中得到的信息。我可能跳过了一些步骤,也可能有更好的方法来完成。另一方面,我没有遇到任何生成的PS问题,您可以在操作过程中填补空缺。如果您尝试此操作并发现任何问题,请添加评论以供将来参考。


谢谢Eran。你能告诉我在设置中如何找到生成无桩代理吗? - bobbyalex
另外,要创建的项目类型是什么?没有空的dll项目。唯一的选择是MFC dll项目。 - bobbyalex
“生成无存根代理”在MIDL通用设置中。要创建一个空的DLL项目,请从选择Win32应用程序开始,并在应用程序设置页面上将类型设置为DLL。祝你好运! - Eran
我无法在任何地方找到“生成无桩代理”!没有“MIDL常规设置”。 - bobbyalex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接