使用DLL调用进入函数时程序崩溃

本文关键字:程序 崩溃 函数 DLL 调用 使用 | 更新日期: 2023-09-27 17:54:29

代码:

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时,应用程序会崩溃。即使带有»输入按钮点击«的消息框也不会显示。即使我使用

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位(它也崩溃了。

有人知道这里出了什么问题吗?

使用DLL调用进入函数时程序崩溃

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

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

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

我意识到这是一个古老的死线程,但如果其他人看到这个——

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

我四处搜索,看看如何在启动时检查所有必需的DLL,偶然发现了这个问题。如果找不到所有必需的DLL,本机C++应用程序甚至不会启动。C#"延迟加载"是DLL吗?大概