Инициализация ActiveX: объект AxHost.State - PullRequest
3 голосов
/ 05 января 2012

Я пытаюсь встроить элемент управления Unity3D-ActiveX в форму WPF с помощью элемента управления WinFormsHost.

На самом деле это хорошо работает при установке пути в окне свойств VS, но при установке его в моем файле кода ничего не загружается. Это известная проблема элемента управления, но я подумал, что могу просто скопировать код создания дизайнера форм и инициализировать его вручную.

При просмотре кода инициализации я заметил, что в коде нет свойства src, но оно используется в окне свойств. Установка свойства вручную не работает (выдает ошибку).

После некоторых испытаний я решил проверить сборку отверстий для свойства src, но свойство src никогда не устанавливается, и я даже не могу найти строку пути.

Заключительные мысли

Я заметил, что может быть только одно место, где расположен путь src: ресурс, сгенерированный конструктором оконных форм, который является объектом типа AxHost.State .

Вопрос

Как создать действительный объект AxHost.State для инициализации элемента управления Unity3D-ActiveX, который должен загружать указанный мной Unity3D-файл?

Ответы [ 3 ]

4 голосов
/ 20 января 2012

Это решение, которое работает, но немного медленно (Примечание: вам нужно один раз инициализировать элемент управления в конструкторе форм и скопировать объект OcxState в ресурсы сборки):

// Create a ocx state object with the correct path
_Unity = new AxUnityWebPlayerAXLib.AxUnityWebPlayer();
((System.ComponentModel.ISupportInitialize)(_Unity)).BeginInit();
_Unity.OcxState = (AxHost.State)(Resources.Unity3DOcx);
_Unity.TabIndex = 0;
Controls.Add(_Unity);
((System.ComponentModel.ISupportInitialize)(_Unity)).EndInit();
_Unity.src = _File;
AxHost.State state = _Unity.OcxState;
_Unity.Dispose();

// Create the unity web player object
_Unity = new AxUnityWebPlayerAXLib.AxUnityWebPlayer();
((System.ComponentModel.ISupportInitialize)(_Unity)).BeginInit();
this.SuspendLayout();
_Unity.Dock = DockStyle.Fill;
_Unity.Name = "Unity";
_Unity.OcxState = state;
_Unity.TabIndex = 0;
Controls.Add(_Unity);
((System.ComponentModel.ISupportInitialize)(_Unity)).EndInit();
this.ResumeLayout(false);
2 голосов
/ 23 июля 2012

Если вы хотите установить параметр в свойство disableContextMenu в ActiveX Unity Web player, вам необходимо подготовить метод IPropertyBag.Read в вашей программе.

Я создал пример программы на C ++ (Visual Studio 2010), в которой в свойстве disableContextMenu задан параметр «true». Смотри http://www.nibiirosoft.com/download/UnityActiveXSample.zip

И используя эти коды, я сделал плеер для файлов .unity3d (http://www.nibiirosoft.com/Product/UniPlayer.html).

Надеюсь, это будет вам полезно.

0 голосов
/ 19 января 2012

Декомпиляция dll "AxUnityWebPlayerAXLib" и добавление параметра src непосредственно в код решает проблему.

Все работает нормально, но у меня все еще есть проблема с "disableContextMenu".

...