首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何仅在代码中创建AxHost [C#]

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

Stack Overflow用户
提问于 2008-09-19 22:15:29
回答 1查看 3.3K关注 0票数 2

我使用COM包装与交互。

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

AxHost.AttachInterfaces看起来像这样

代码语言:javascript
复制
    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; 
...

只要我把这个AxHost托管在Windows控件中,一切都会正常工作。但我不能在构造函数中将事件连接起来。

例如,这不起作用:

代码语言:javascript
复制
    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继承的控件,例如在控制台应用程序中使用它呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2008-09-20 01:02:19

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/106081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档