2010-02-11 11 views
6

He creado un control OpenGL en C++ y deseo usarlo en una aplicación WPF. Lo he logrado con éxito y funciona bien en las máquinas Vista y XP, pero cuando abro mi proyecto en una máquina con Windows 7, la ventana de diseño de WPF no se mostrará. Cuando intento ejecutar el programa obtengo la excepción:Error al crear un control OpenGL en una ventana wpf en windows 7

"No se puede crear una instancia de 'Ventana1' definida en el ensamblado 'LabUserInterface, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null'. Se ha lanzado una excepción por el objetivo de una invocación. Error en el archivo de marcado 'Window1.xaml' Línea 1 Posición 9. "

'LabUserInterface' es donde viven mis cosas de OpenGL. También tengo este error en la ventana de WPF:

"Tipo 'MS.Internal.Permissions.UserInitiatedNavigationPermission' en la Asamblea 'PresentationFramework, Version = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' no es marcada como serializable "

Respuesta

-1

No creo que su error de permiso tenga algo que ver con OpenGL. Tal vez se haya generado tratando de recopilar información sobre el error real (eso explicaría el intento de usar el serializador) Intente comentar todo el interior de su control personalizado para que simplemente herede de la clase base y vuelva a intentarlo (vale, puede necesita dejar algunas definiciones de propiedad). Si eso lo soluciona, vuelva a agregar la implementación lentamente hasta que aisle lo que está causando el problema.

Si aún falla, lo que probablemente quiera hacer es abrir una copia de Visual Studio y usarla para depurar una segunda copia de Visual Studio con su proyecto abierto en el diseñador de WPF. Luego puede romper con la excepción, ver las variables arriba y abajo de la pila de llamadas y, en general, solucionar su problema.

¿Tiene la misma versión de Visual Studio y los mismos parches en entornos de desarrollo tanto operativos como no funcionales? Los parches de Visual Studio son mucho más propensos a producir este problema que el sistema operativo subyacente. Con OpenGL, el controlador de video también podría ser importante, así que publique esa información.

2

dos posibilidades:

1) UAC, encauzamiento tema, problema de ruta de la dependencia, la seguridad .NET o algún otro problema de permisos (tal vez ejecutar como administrador) a prueba. O asegúrese de que su ensamblaje tenga visibilidad para todas las dependencias y los permisos correctos (es decir, privado si está en las carpetas bin o junto a la aplicación, público si está dentro o fuera del espacio de la aplicación).

2) Además, asegúrese de que puede ejecutar OpenGL en la casilla win7. Podría ser un controlador de video o algo que intenta enumerar los perfiles de video en la tarjeta. Actualice los controladores de su tarjeta de video. Si usa una versión compartida de OpenGL, asegúrese de que esté presente en la máquina.

Sé que cuando se realiza un control de C++ en .NET, los problemas de seguridad son un problema principal. Asegúrese de que su control C++ tenga visibilidad en las dlls abiertas (si se comparten) y que estén en la ruta de carga (colóquelas todas en C: \ windows \ system32 si todo lo demás no se puede asegurar de que se puedan ver o locales en la privacidad carpeta de ensamblaje (bin)).

Tuvimos este mismo problema con un kit de herramientas de imagen para PVR y resultó que una DLL no estaba en la ruta de dependencia. Una buena herramienta es DependencyWalker para verificar: http://dependencywalker.com/

0

Gracias Ryan, el caminante de dependencia fue de gran ayuda. Resulta que necesitaba glut32.dll en la carpeta de depuración para el proyecto WPF, que es algo que no he necesitado en otras máquinas.

+0

Parece depender de la configuración particular del entorno de desarrollo del estudio visual a donde Visual Studio busca las bibliotecas de las que depende la solución. – paj777

Cuestiones relacionadas