我的程序是用C#.NET 2.0编写的,它使用的是使用Microsoft Visual Studio 2008 SP1用C ++编写的dll中的外部函数。 如果我从放置程序的目录中删除dll,程序会在它应该使用dll时崩溃。这是正常的。
但是使用我的程序的用户在不移动dll的情况下在同一个地方获得相同的错误。他们都有来自>here<的C ++ Redistributable 2008
是否因为我使用.NET 2.0而不是NET 3.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的签名和版本