ActiveX初始化:AxHost.State对象

我正在尝试使用WinFormsHost-Control将Unity3D-ActiveX控件嵌入到WPF表单中。

实际上它在VS的属性窗口中设置路径时效果很好,但是在我的代码文件中设置它时它不会加载任何东西。 这是一个已知的控件问题,但我想我可以简单地复制表单设计器的创建代码并手动初始化它。

在查看初始化代码时,我注意到代码中没有src属性,但属性在属性窗口中使用。 手动设置属性不起作用(抛出错误)。

经过一些测试之后,我决定检查src属性的孔组件,但是src属性从未设置过,我甚至找不到路径的字符串。

最后的想法

我注意到src-path所在的位置只有一个:窗口表单设计器生成的资源,它是AxHost.State -type的一个对象。

如何创建一个有效的AxHost.State对象来初始化应该加载我指定的Unity3D文件的Unity3D-ActiveX控件?

这个解决方案有效但速度有点慢(注意:您需要在Forms Designer中初始化Control一次并将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); 

如果要在ActiveX Unity Web播放器中将参数设置为disableContextMenu属性,则需要在程序中准备IPropertyBag.Read方法。

我制作了一个示例C ++程序(Visual Studio 2010),它将“true”参数设置为disableContextMenu属性。 请参阅http://www.nibiirosoft.com/download/UnityActiveXSample.zip

使用该代码,我为.unity3d文件制作了一个播放器( http://www.nibiirosoft.com/Product/UniPlayer.html )。

我希望它对你有所帮助。

反编译dll“ AxUnityWebPlayerAXLib ”并直接在代码中添加src参数解决了问题。

一切正常,但我仍然遇到“ disableContextMenu ”的问题。