【问题标题】:c++/cli dll problem on Windows 7 without vs2008 installed未安装 vs2008 的 Windows 7 上的 c++/cli dll 问题
【发布时间】:2010-07-10 22:08:59
【问题描述】:

好的,这是我今天的怪癖。
我为无法访问源代码的现有 C++ 程序创建扩展。

我编写标准 C/C++ dll 并使用 IJW 调用 C# dll。我有一段时间没有这样做了,但现在我正试图让一个在 Window 7 上工作。我收到一个错误(错误 0000036B1 - 不确定这是应用程序的内部错误号,还是 Windows 错误。

我有多个虚拟电脑(XP 和 Windows 7) dll 在 XP 上运行良好。如果安装了 Visual Studio 2008,它也适用于 Windows 7。但不是在仅安装了 Microsoft Visual C++ 2008 SP1 Redistributable Package 的干净 Windows 7 上。

只要编译器开关设置为 MT[d],我就可以在干净的 Windows 7 机器上编译和运行直接 C++ dll,但如果我设置 /clr 开关,我必须将其更改为 MD[d],然后它在干净的 Windows 7 盒子上失败了。但是,不是在安装了 Visual Studio 2008 的 Windows 7 机器上。

关于我需要在干净的盒子上安装什么有什么想法吗? (当然除了 VS ;-))

感谢您的帮助。

L.李·桑德斯

【问题讨论】:

  • 附加信息:最小工作示例 dll(无 clr 代码)可与 MT[d] 开关一起使用,但如果我切换到 /clr(仍然没有实际 clr 代码)和 MD[d],则dll 无法加载到程序中并出现上述错误。但它仍然可以在干净的 XP 机器和安装了 VS2008 的 Win7 机器上继续运行。

标签: windows-7 c++-cli visual-studio-2008-sp1


【解决方案1】:

好吧,这很糟糕。有人指出我需要的文件是调试版本,这意味着我已经在调试模式下编译了我的 dll。他建议我尝试释放模式。

因此,使用运行 Windows 7 Basic 的 Virtual PC 的新副本(这是安装的 3.5 C++ redist),我复制了我的原始 dll(处于调试模式的那个)只是为了验证这台 Virtual PC 是否存在问题。是的。

然后我复制了一个在发布模式下编译的 dll。有效。

好的,我正式想用头撞墙。

感谢您的宝贵时间。

L.李·桑德斯

【讨论】:

    【解决方案2】:

    您将需要 VC++ Runtime Redistributable(支持原生 C++ 代码)和 .NET Framework 3.5(支持 C++/CLI 代码)。

    .NET 3.5 应该带有 Win7,但 VS2008 SP1 带有 .NET 3.5 SP1,所以我建议从 Windows Update 安装所有 .NET 更新。

    【讨论】:

      【解决方案3】:

      现在我感觉很糟糕。它不是完全全新安装的 Windows 7。我需要安装我正在为其编写扩展程序的应用程序。该程序的最新补丁安装了 Visual C++ 2008 SP1 Redistributable 软件包。

      好吧,我决定尝试创建一个有点小 C++/cli dll 的安装项目,并告诉它包含依赖项。它拉入了 2 个文件:

      c:\程序文件\通用文件\合并模块\microsoft_vc90_debugcrt_x86.msm C:\Program Files\Common Files\Merge Modules\policy_9_0_Microsoft_VC90_DebugCRT_x86.msm

      我运行了安装程序,这个小应用程序运行了。我手动复制了我的 dll,然后发现它们现在可以正常工作了。所以为了让它工作,我需要这两个文件。

      为什么?为什么它们没有包含在 Redist 包中?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多