0

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

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

是因为我在 .NET 2.0 而不是 NET 3.5 中制作了程序,还是因为可再发行组件应该是旧版本而发生这种情况?

编辑:请注意,程序运行良好。

>>新线程<<

4

5 回答 5

1

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

于 2009-04-09T13:45:15.643 回答
0

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

于 2009-04-09T13:20:58.727 回答
0

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

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

于 2009-04-09T13:26:19.480 回答
0

Dependency Walker非常适合追踪这类问题。您可以将 DLL 加载到其中,它会告诉您是否有任何依赖项不可用。有时缺少 DLL 不一定是问题(如果您不沿着该代码路径走),但它比猜测要好得多。

于 2009-04-09T13:30:20.780 回答
0

在这种情况下使用 .NET 2.0 或 3.5 没有区别。
查看从 C++ 链接和导出函数的方法(如果它是非托管的)如果外部函数是在托管 C++ 上编写的,请查看 dll 的签名和版本

于 2009-04-09T13:30:46.643 回答