【问题标题】:C# crash when loading C++ dll加载 C++ dll 时 C# 崩溃
【发布时间】:2009-04-09 13:07:01
【问题描述】:

我的程序是用 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<<

【问题讨论】:

  • 对于不起作用的用户来说,实际的崩溃消息是什么?

标签: c# c++ dll crash


【解决方案1】:

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

【讨论】:

  • 我只接受你的回答,因为你提到了 VM Box。我用过。请查看我的新问题以获取更多信息。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-01-16
          • 1970-01-01
          • 2011-06-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-13
          • 1970-01-01
          相关资源
          最近更新 更多