代码:
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位)上也崩溃。 / p>
有谁知道这里的问题是什么?
答案 0 :(得分:0)
我暂时没有做任何OpenGL的事情(以前用C ++和win32做过),但Hwnd是一个窗口句柄,就像C ++中的大多数事情只是窗口的内存地址一样, 64位更改默认指针大小我假设您在托管环境中代表C ++使用的库未设置为处理64位系统。
答案 1 :(得分:0)
这听起来很可能是导致问题的一些架构混淆。您是在x64系统上使用x64版本的库还是尝试使用32位的?在后面的例子中,转到项目属性(C#项目)并将目标CPU设置为x64
(默认情况下应为Any CPU
)。使用默认设置,您的项目将由64位虚拟机执行,因此无法加载32位库。
完成后,确保所有系统都安装了正确的依赖项。例如。我认为如果缺少正确的运行时文件,微软从未改变.net应用程序的简单崩溃行为。如果这也无法解决问题,那么DLL文件的初始化代码中很可能存在一些错误(或其他崩溃原因)。
答案 2 :(得分:0)
我意识到这是一个古老而死的线程,但如果有人看到这个 -
我有一个依赖于DLL(本机/ clr代码)的C#应用程序。当我运行没有DLL的应用程序时,它打开正常,一切看起来都很棒,直到你点击一个实际调用DLL函数的按钮。然后程序崩溃,如本问题所述。在我看来OP可能在他的开发机器上有DLL,但在其他神秘计算机上没有它们。因此,程序运行并且似乎有效,直到进行DLL调用。
我正在四处寻找如何在启动时检查所有必需的DLL并偶然发现这个问题。如果找不到所有必需的DLL,则本机C ++应用程序甚至不会启动。 C#“延迟加载”它的DLL吗?也许