gpt4 book ai didi

c# - 如何仅在代码中创建 AxHost [C#]

转载 作者:太空宇宙 更新时间:2023-11-03 14:37:56 26 4
gpt4 key购买 nike

我正在使用 COM Wrapper 与 Windows Media Player 交互。

它使用 AxHost 以某种方式包装播放器,对我来说这一切都只是引擎盖下的魔法^^

AxHost.AttachInterfaces 看起来像这样

    protected override void AttachInterfaces() 
{
try
{
//Get the IOleObject for Windows Media Player.
IOleObject oleObject = this.GetOcx() as IOleObject;

//Set the Client Site for the WMP control.
oleObject.SetClientSite(this as IOleClientSite);

Player = this.GetOcx() as WMPLib.WindowsMediaPlayer;
...

只要我在 Windows 窗体控件中托管此 AxHost,一切正常。但我无法在构造函数中连接事件。

这个例子是行不通的:

    public WMPMediaRating()
{
var remote = new WMPRemote.RemotedWindowsMediaPlayer();
_WMP = remote.Player;

_WMP.MediaChange += new _WMPOCXEvents_MediaChangeEventHandler(_WMP_MediaChange);
}

remote.Player 始终为 null,程序因 NullReferencesException 而崩溃。

AttachInterfaces() 中的代码以某种方式仅在绘制表单或完成其他所有操作后执行。

我尝试手动调用 AttachInterfaces(),但这也不起作用,因为 GetOcx() 不返回任何内容。


那么如何在没有 Windows 窗体的情况下实例化我的 AxHost 继承控件,以便在控制台应用程序中使用它?

最佳答案

仅供引用:没有人会阻止您在控制台应用程序中使用隐藏窗口。

您将无法在非 Windows 应用程序中托管媒体播放器 - 它需要托管。如果您想播放一些音乐,您可以使用媒体图创建一个图来呈现(播放)您的音乐文件 - 它不需要任何额外的托管。

关于c# - 如何仅在代码中创建 AxHost [C#],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/106081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com