Comment afficher une fenêtre de sous-fenêtres dans Windows Form?Affichage OpenGL sur le formulaire C#
glutCreateWindow ("exemple") créer une autre forme,
glutCreateSubWindow (hwnd, 0, 0, 100, 100), où hwnd est la poignée à ma principale forme de fenêtre en C#, je reçois une exception AccessViolation.
Le programme Glut est dans une DLL C++. Mon application est sur C# WPF. Je dois afficher la vue GLUT à mon C# Formulaire
C++ Code:
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;
}
}
code 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);
}
Je ne suis pas assez confiant pour poster comme une réponse, mais quelques idées ... 1./Essayez d'ajouter 'non sécurisé' à Window_Loaded et InitGlut dans votre code C#. 2./Assurez-vous que vous utilisez des versions 64 bits des 3 éléments (la bibliothèque GLUT, votre code C++ et votre code C#). –
Vous avez une incohérence de signature dans votre code qui provoquera des plantages sur les systèmes d'exploitation 64 bits. Le côté C++ s'attend à ce que hwnd soit un 'int' (ce qui est également faux - ils sont de la taille d'un pointeur), et C# le transmet comme un' IntPtr' (correct, mais pas ce que C++ attend). – ChrisV