【问题标题】:Program crashes when entering function with DLL call使用 DLL 调用进入函数时程序崩溃
【发布时间】:2012-01-26 23:50:35
【问题描述】:

代码:

private void button1_Click(object sender, RoutedEventArgs e)
{
   MessageBox.Show("Enters a button click");
   // Create our OpenGL Hwnd 'control'...
   HwndHost host = new WPFOpenGLLib.OpenGLHwnd();

   // ... and attach it to the placeholder control:
   hwndPlaceholder.Child = host;
}

WPFOpenGLLib.OpenGLHwnd() 是 C++ DLL 中的一个类。我在 C# WPF 应用程序中添加了对该 DLL 的引用。但是当我单击button1 时,应用程序崩溃了。甚至带有 »Enters a button click« 的 messageBox 也不会显示。即使我使用

bool a = false;
if (a)
{
   // Create our OpenGL Hwnd 'control'...
   HwndHost host = new WPFOpenGLLib.OpenGLHwnd();

   // ... and attach it to the placeholder control:
   hwndPlaceholder.Child = host;
}

它崩溃了。

顺便说一句,在一台计算机(我编写应用程序的地方)(Win7 32 位)上一切正常,在另一台计算机(Win7 64 位)上崩溃,在另一台计算机(Win7 32 位)上也崩溃。

有谁知道这里的问题是什么?

【问题讨论】:

    标签: c# c++ dll


    【解决方案1】:

    我已经有一段时间没有做过任何 OpenGL 的东西了(以前在 C++ 和 win32 中做过),但是 Hwnd 是一个窗口句柄,就像 C++ 中的大多数东西一样,它只是一个窗口的内存地址,并且作为64 位更改默认指针大小 我假设您在托管环境中代表 C++ 使用的库未设置为处理 64 位系统。

    【讨论】:

    • 但这并不能解释为什么它会在另一台 32 位机器上崩溃。但实际上,如果想在 64 位和 32 位环境中使用 DLL,则必须编译两次。
    • 哦,抱歉,我没有看到其他关于它在另一个 32 位系统上崩溃的信息。
    【解决方案2】:

    这听起来很可能是导致问题的一些架构混淆。您是在 x64 系统上使用 x64 版本的库还是尝试使用 32 位版本的库?在后面的情况下,转到项目属性(您的 C# 项目的)并将目标 CPU 设置为x64(默认情况下应该是Any CPU)。使用默认设置,您的项目将由 64 位虚拟机执行,因此无法加载 32 位库。

    完成后,确保所有系统都安装了正确的依赖项。例如。我认为 Microsoft 从未改变过 .net 应用程序在缺少正确的运行时文件时简单地崩溃的行为。如果这也不能解决问题,则很可能是 DLL 文件的初始化代码中存在一些错误(或其他崩溃原因)。

    【讨论】:

      【解决方案3】:

      我知道这是一个陈旧的死线,但如果其他人看到这个 --

      我有一个依赖 DLL(本机/clr 代码)的 C# 应用程序。当我在没有 DLL 的情况下运行应用程序时,它可以正常打开并且一切看起来都很好,直到您单击一个实际调用 DLL 函数的按钮。然后程序崩溃,如this question中所述。在我看来,OP 可能在他的开发机器上有 DLL,但在其他神秘计算机上没有。因此,程序运行并且似乎可以工作,直到进行 DLL 调用。

      我正在四处寻找如何在启动时检查所有必需的 DLL,并偶然发现了这个问题。如果未找到所有必需的 DLL,则本机 C++ 应用程序甚至不会启动。 C#“延迟加载”是 DLL 吗?也许吧。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-07
        • 2016-08-03
        • 1970-01-01
        相关资源
        最近更新 更多