使用DLL调用进入函数时程序崩溃
Program crashes when entering function with DLL call
代码:
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位(它也崩溃了。
有人知道这里出了什么问题吗?
我已经有一段时间没有做任何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吗?大概
- 程序崩溃并显示"std::out_of_range"错误
- 试图创建流或fopen时程序崩溃
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 如何找出应用程序崩溃的原因 - Win 10 LTSB
- 操纵安卓相机的深度图导致应用程序崩溃
- 为什么当我尝试搜索双链表中第一个数据条目之外的数据时,程序崩溃了?
- DLL Made with CMake 使程序崩溃
- 程序崩溃使用boost::asio
- 调用 free() 有时会导致程序崩溃
- 邮件加密程序崩溃
- 调用 java 的回调() 时应用程序崩溃.由于 detatchThread 而获得运行时错误
- 比较迭代器会使程序崩溃,而不会在自定义气泡排序实现中出现错误
- For 循环在尝试读取数组 c++ 时程序崩溃
- 即使有 0 个错误,Getter 似乎也会使程序崩溃
- Windows桌面程序保存您的计算机会话 - 基于程序崩溃时的恢复会话
- 无法访问的代码如何导致我的程序崩溃?
- 矢量迭代器在尝试调用函数时使我的程序崩溃
- QCompleter set模型使应用程序崩溃
- 使用唯一指针调用函数会使我的程序崩溃
- 删除SDL_PollEvent时程序崩溃