我使用COM包装与交互。
它使用一个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;
...只要我把这个AxHost托管在Windows控件中,一切都会正常工作。但我不能在构造函数中将事件连接起来。
例如,这不起作用:
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继承的控件,例如在控制台应用程序中使用它呢?
发布于 2008-09-20 01:02:19
FYI:没有人阻止您在控制台应用程序中使用隐藏窗口。
您将无法在非windows应用程序中托管媒体播放器--它需要托管。如果您想播放一些音乐,您可以使用媒体图形创建一个图形,它呈现(播放)您的音乐文件-它将不需要任何额外的托管。
https://stackoverflow.com/questions/106081
复制相似问题