【问题标题】:Building Proxy/Stub dll in VS 2008在 VS 2008 中构建代理/存根 dll
【发布时间】:2010-11-06 01:37:33
【问题描述】:

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

VS 2008 中的新 ATL 项目有一个单独的 PS 项目,用于构建 PS DLL。但是从 VC6 迁移并没有创建这个项目。

我尝试在 PS mk 文件上调用 nmake,但是对于存在于我们的源文件以及自动包含的 windows 头文件中的枚举类型,这给出了重新定义错误。在解决方案中,我们通过定义排除不必要的头文件的WIN32_LEAN_AND_MEAN 预处理器来解决此问题。使用 nmake 时我可以这样做吗?

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

【问题讨论】:

    标签: visual-studio-2008 migration atlcom


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • nb。创建 ATL COM EXE 服务器项目时,请不要选中“允许合并代理/存根代码”。 Proxy+Stub 可以驻留在单独的 DLL 中,所以这个选项似乎很有意义。不过,它根本不会生成任何代理存根项目。
    【解决方案2】:

    我已经做了一段时间了,即使那时我也没有任何最新的说明,但现在回顾项目,我将尝试重建过程:

    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 没有任何问题,您也许可以随时填补空白。如果您尝试此操作并发现任何遗漏,请添加评论以供将来参考。

    【讨论】:

    • 谢谢伊兰。你能告诉我在哪里可以找到设置中的生成无存根代理吗?
    • 另外,要创建的项目类型是什么?没有空的 dll 项目。唯一的一个是 MFC dll 项目。
    • “生成无存根代理”位于 MIDL 常规设置中。要创建一个空的 DLL 项目,首先选择一个 Win32 应用程序,然后在应用程序设置页面上将类型设置为 DLL。祝你好运!
    • 我在任何地方都找不到“生成无存根代理”!没有“MIDL 常规设置”。
    猜你喜欢
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    相关资源
    最近更新 更多