Ошибка создания элемента управления OpenGL в окне wpf на Windows 7 - PullRequest
6 голосов
/ 11 февраля 2010

Я создал элемент управления OpenGL в C ++ и хочу использовать его в приложении WPF. Я успешно выполнил это, и он отлично работает на компьютерах с Vista и XP, но когда я открываю свой проект на компьютере с Windows 7, окно дизайна WPF не отображается. Когда я пытаюсь запустить программу, я получаю исключение:

"Невозможно создать экземпляр 'Window1', определенный в сборке 'LabUserInterface, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null'. Исключение было выдано целью вызова. Ошибка в файле разметки 'Window1.xaml' Строка 1, Позиция 9. "

«LabUserInterface» - это то, где живет мой материал OpenGL. Также у меня есть эта ошибка в окне WPF:

"Тип 'MS.Internal.Permissions.UserInitiatedNavigationPermission' в сборке" PresentationFramework, версия = 3.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 'не помечена как сериализуемая. "

Ответы [ 3 ]

2 голосов
/ 17 февраля 2010

Две возможности:

1) UAC, проблема с путями, проблема с зависимостями, безопасность .NET или некоторые другие проблемы с разрешениями (возможно, от имени администратора) для тестирования. Или убедитесь, что ваша сборка имеет видимость для всех зависимостей и правильных разрешений (то есть закрытых, если в папках bin или рядом с приложением, общедоступных, если в gac или за пределами пространства приложения).

2) Также убедитесь, что вы можете запустить OpenGL на коробке win7. Это может быть видеодрайвер или что-то, пытающееся перечислить профили видео на карте. Обновите драйверы вашей видеокарты. Если используется общая версия OpenGL, убедитесь, что она присутствует на компьютере.

Я знаю, что когда вы создаете элемент управления C ++ в .NET, проблемы безопасности являются главной проблемой. Убедитесь, что ваш элемент управления C ++ имеет видимость в dll opengl (если он используется совместно) и что они находятся в пути загрузки (поместите их все в C: \ windows \ system32, если все остальное не удается, чтобы убедиться, что их можно увидеть или локально в приватном папка сборки (корзина)).

У нас была такая же проблема с инструментарием изображения для PVR, и оказалось, что одна DLL не была в пути зависимости. Хороший инструмент - DependencyWalker для проверки: http://dependencywalker.com/

0 голосов
/ 21 февраля 2010

Спасибо, Райан, ходок с зависимостями мне очень помог. Оказалось, что мне также нужен glut32.dll в папке отладки для проекта WPF, что мне не нужно на других машинах.

0 голосов
/ 15 февраля 2010

Я не думаю, что ваша ошибка разрешения имеет какое-либо отношение к OpenGL. Возможно, он генерируется, пытаясь собрать информацию о реальной ошибке (которая объясняет попытку использования сериализатора). Попробуйте закомментировать все внутренние элементы вашего пользовательского элемента управления, чтобы он просто наследовал от базового класса, и повторите попытку (хорошо, вы можете нужно оставить некоторые определения свойств). Если это решит проблему, медленно добавляйте реализацию, пока не найдете причину проблемы.

Если по-прежнему происходит сбой, вам, вероятно, нужно открыть одну копию Visual Studio и использовать ее для отладки второй копии Visual Studio с открытым проектом в конструкторе WPF. Затем вы можете разбить исключение, просматривать переменные вверх и вниз по стеку вызовов и, как правило, устранять неполадки.

Есть ли у вас одна и та же версия Visual Studio и одинаковые исправления как в рабочей, так и в нерабочей среде разработки? Патчи Visual Studio гораздо чаще вызывают эту проблему, чем базовая ОС. С OpenGL также может быть важен видеодрайвер, поэтому публикуйте эту информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...