在Windows 7操作系统的WPF窗口中创建OpenGL控件时出错。

6

我已经在C++中创建了一个OpenGL控件,希望在WPF应用程序中使用它。我已经成功完成了这个任务,并且在Vista和XP机器上工作得很好,但是当我在Windows 7机器上打开我的项目时,WPF设计窗口无法显示。当我尝试运行程序时,会出现以下异常:

"Cannot create instance of 'Window1' defined in assembly 'LabUserInterface, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. Exception has been thrown by the target of an invocation. Error in markup file 'Window1.xaml' Line 1 Position 9."

'LabUserInterface' 是我的OpenGL内容所在的地方。此外,我在WPF窗口中也遇到了以下错误:

"Type 'MS.Internal.Permissions.UserInitiatedNavigationPermission' in Assembly 'PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' is not marked as serializable."

3个回答

2
两种可能性:
1)UAC、路径问题、依赖路径问题、.NET安全或其他权限问题(可能需要以管理员身份运行进行测试)。或者确保您的程序集对所有依赖项具有可见性和正确的权限(即如果在bin文件夹中或应用程序旁边,则为私有;如果在gac中或应用程序空间之外,则为公共)。
2)此外,请确保您可以在win7计算机上运行OpenGL。可能是视频驱动程序或某些尝试枚举卡上的视频配置文件的东西。更新您的显卡驱动程序。如果使用共享的OpenGL版本,请确保它存在于计算机上。
我知道当您在.NET中制作C++控件时,安全问题是一个主要问题。确保您的C++控件可以看到opengl dll(如果共享),并且它们在加载路径中(如果万不得已,将它们全部放在C:\ windows \ system32中以确保它们可以被看到,或者在私有程序集文件夹(bin)中本地化)。
我们曾经遇到过一个PVR图像工具包的同样问题,结果发现一个dll不在依赖路径中。一个好的工具是DependencyWalker,可以用来检查:http://dependencywalker.com/

0

感谢 Ryan,Dependency Walker 帮了我大忙。事实证明,我的 WPF 项目的 Debug 文件夹里也需要 glut32.dll,这是我在其他机器上不需要的。


似乎取决于特定的Visual Studio开发环境设置,Visual Studio会在哪里查找解决方案所依赖的库。 - paj777

-1

我认为你的权限错误与OpenGL无关。也许它是在尝试收集有关真正错误的信息时生成的(这可以解释尝试使用序列化器)。尝试注释掉自定义控件内部的所有内容,以便它仅从基类继承,然后再次尝试(好吧,您可能需要保留一些属性定义)。如果这样修复了问题,请逐渐添加实现,直到找到引起问题的原因。

如果仍然失败,您可能想要打开一个Visual Studio副本,并使用它来调试打开WPF设计器中项目的第二个Visual Studio副本。然后,您可以在异常上中断,查看沿着调用堆栈向上和向下的变量,并通常解决问题。

您的工作和非工作开发环境是否具有相同版本的Visual Studio和相同的修补程序?与底层操作系统相比,Visual Studio补丁更有可能产生此问题。对于OpenGL,视频驱动程序也很重要,因此请发布该信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接