如何在Windows窗體中顯示過量窗口?關於C#表單的OpenGL視圖
glutCreateWindow( 「實施例」)創建另一種形式中,
glutCreateSubWindow(HWND,0,0,100,100),其中hwnd是處理在C#我的主窗口的形式,我得到一個AccessViolation異常。
Glut程序在C++ DLL中。我的應用程序在C#WPF上。我需要在我的C#形式顯示過剩視圖
C++代碼:
extern "C"
{
__declspec(dllexport) int InitGlut(int hwnd, int top, int left, int width, int height)
{
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(top,left);
glutInitWindowSize(320,320);
//glutCreateWindow("Example");
glutCreateSubWindow(hwnd, top, left, width, height);
glutDisplayFunc(renderScene);
glutMainLoop();
return 0;
}
}
C#代碼:
const string pathToDll = "../../../Release/MyDLL.dll";
[DllImport(pathToDll)]
public static extern int InitGlut(IntPtr hwnd, int top, int left, int width, int height);
private void Window_Loaded(object sender, RoutedEventArgs e)
{
IntPtr hwnd = new WindowInteropHelper(Application.Current.MainWindow).Handle;
InitGlut(hwnd, 0, 0, 100, 100);
}
我沒有足夠的信心張貼作爲回答,但一對夫婦的想法... 1. /在你的C#代碼中嘗試在Window_Loaded和InitGlut中添加'unsafe'。 2.確保您使用的是全部3個元素(GLUT庫,C++代碼和C#代碼)的64位版本。 – 2011-04-21 20:24:10
您的代碼中存在簽名不匹配,這將導致64位操作系統崩潰。 C++方面希望hwnd是一個'int'(這也是錯誤的 - 它們是指針大小的),C#將它作爲'IntPtr'傳遞(正確,但不是C++期望的)。 – ChrisV 2011-04-21 21:05:33