2

好的,这是我今天的怪事。
我为我无法访问源代码的现有 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·李·桑德斯

4

3 回答 3

1

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

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

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

好吧,我正式想把头撞在墙上。

谢谢你的时间。

L·李·桑德斯

于 2010-07-14T03:46:06.540 回答
0

You will need both the VC++ Runtime Redistributable (which has support code for native C++) and the .NET Framework 3.5 (which has support code for C++/CLI).

.NET 3.5 should come with Win7, but VS2008 SP1 comes with .NET 3.5 SP1 so I would recommend installing all the .NET updates from Windows Update.

于 2010-07-11T16:19:48.113 回答
0

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

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

c:\program files\common files\merge modules\microsoft_vc90_debugcrt_x86.msm C:\Program Files\Common Files\Merge Modules\policy_9_0_Microsoft_VC90_DebugCRT_x86.msm

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

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

于 2010-07-12T00:23:51.510 回答