2009-04-09 124 views
0

我的程序是用C#.NET 2.0编写的,它使用的是使用Microsoft Visual Studio 2008 SP1以C++编写的dll的外部函数。 如果我从程序所在的目录中删除了dll,程序就会在应该使用dll的时候崩溃,这是正常的。加载C++ dll时出现C#crash

但使用我的程序在同样的地点同样的错误,而无需移动dll.They所有可在用户有C++可再发行2008年从>here<

是否发生,因为我在.NET 2.0制作的节目,而不是的NET 3.5或它发生,因为可再分发应该是一个旧版本?

编辑:对我来说,程序运行良好。

>>new thread<<

+0

用户不能正常工作的实际崩溃消息是什么? – 2009-04-09 13:14:45

回答

1

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

+0

我只接受你的答案,因为你提到VM Box.I使用过。请检查我的新问题以获取更多信息。 – 2009-04-09 18:31:54

0

你链接到看起来是从Visual Studio 2008。如果SP1的变化的原始版本的C++可再发行,我看得出来,导致崩溃。也许有用户需要安装的可再发行版本的更新版本?

0

在你的问题中,关于实际碰撞的可能性很小,这可能意味着任何很多事情。根据我对混合.NET和本地C++的经验,并行(SxS)中可能会出现很多问题,尤其是如果DLL和.NET应用程序是使用不同版本的编译器构建的。

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

0

Dependency Walker可以很好地跟踪这些类型的问题。你可以加载一个DLL,它会告诉你它的任何依赖关系是否不可用。有时,缺少的DLL不一定是问题(如果你不遵守这个代码路径),但它比猜测好得多。

0

在使用.NET 2.0或3.5的上下文中没有区别。
查找范围方法,你在C链接和导出功能++(如果非托管) 如果外部函数写在托管C++,考虑签署和dll的