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?

4

2 回答 2

3

Eran 的建议似乎合乎逻辑,但我无法找到他所说的一些项目。所以我尝试了不同的方法。

我在 VS 2008 中创建了一个 Empty ATL(服务器)项目。这会自动创建一个 ps 项目以及普通的 atl 项目。

我将 ps 项目的 vcproj 文件复制到我的项目文件夹中,并将其重命名为myprojectname ps.vcproj。

然后我打开我的解决方案并将新复制的项目添加到其中。我将项目(在 VS 2008 中)重命名为myprojectname ps 并删除了所有已包含在其中的文件。

接下来,我将我的_i.c、_p.c、dlldata.c.def文件包含到项目中。在Linker > Input > Module definition file下的设置中,我添加了我的 def 文件名。

就是这样!像魅力一样工作。

于 2009-06-26T13:20:00.923 回答
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文件设置为服务器项目生成的文件

这就是我对我的一个项目进行事后分析所能得到的。我可能跳过了一些步骤,并且可能有更好的方法来做到这一点。OTOH,我对生成的 PS 没有任何问题,您可以随时填补空白。如果您尝试此操作并发现任何遗漏,请添加评论以供将来参考。

于 2009-06-26T08:42:59.813 回答