加载C ++ DLL时C#崩溃

时间:2009-04-09 13:07:02

标签: c# c++ dll crash

我的程序是用C#.NET 2.0编写的,它使用的是使用Microsoft Visual Studio 2008 SP1用C ++编写的dll中的外部函数。 如果我从放置程序的目录中删除dll,程序会在它应该使用dll时崩溃。这是正常的。

但是使用我的程序的用户在不移动dll的情况下在同一个地方获得相同的错误。他们都有来自>here<的C ++ Redistributable 2008

是否因为我使用.NET 2.0而不是NET 3.5制作程序,或者它发生了,因为可再发行版应该是旧版本?

编辑:请注意,程序运行正常。

>>new thread<<

5 个答案:

答案 0 :(得分:1)

它最有可能是错误的运行时。确保您分发正确的。这些将始终在您的开发框上工作,因为运行时在路径中。对于测试软件,我使用的是Windows xp虚拟机。我将虚拟机设置为全新安装,安装我知道的所需组件(.NET框架等),然后运行我的安装程序。您将遇到令人惊讶的安装问题。

答案 1 :(得分:0)

您链接到的C ++ Redistributable看起来像是来自Visual Studio 2008的原始版本。如果它随SP1更改,我可以看到导致崩溃。也许您的用户需要安装可再发行版本的更新版本?

答案 2 :(得分:0)

在你的问题中,关于实际崩溃的信息很少,这可能意味着很多事情。根据我在混合.NET和本机C ++方面的经验,并排(SxS)可能会出现许多问题,特别是如果DLL和.NET应用程序是使用不同版本的编译器构建的。

您可能需要在本地计算机上重现此问题以进行调试。

答案 3 :(得分:0)

Dependency Walker可以很好地追踪这些问题。您可以将DLL加载到其中,它将告诉您其任何依赖项是否不可用。有时丢失的DLL不一定是个问题(如果你不下去那个代码路径),但它比猜测要好得多。

答案 4 :(得分:0)

在使用.NET 2.0或3.5的上下文中没有区别 查看从C ++链接和导出函数的方法(如果它不受管理) 如果在托管C ++上编写了外部函数,请查看dll的签名和版本

相关问题