Windows Form 내에 glut window를 표시하는 방법은 무엇입니까?C# 폼의 OpenGL 뷰
glutCreateWindow ("예"), HWND가 C에서 # 내 메인 창 형성하는 핸들
glutCreateSubWindow (HWND, 0, 0, 100, 100), 다른 형태를 만들고 난 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# 코드 : 당신은 WPF의 형태는 Win32 개체를 호스팅하는 것처럼
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에 추가해보십시오. 2./당신이 모든 3 요소 (GLUT 라이브러리, C++ 코드 및 C# 코드)의 64 비트 버전을 사용하고 있는지 확인하십시오. –
코드에 서명 불일치가있어 64 비트 운영 체제에서 충돌이 발생합니다. C++ 측에서는 hwnd가'int' (포인터 크기가 잘못되어 있습니다)라고 기대하고 있습니다. C#은'IntPtr' (올바른 것이지만 C++이 기대하는 것은 아닙니다)로 전달합니다. – ChrisV