gpt4 book ai didi

c# - 当我使用区分大小写的语言时如何解决 COM 中不区分大小写的名称冲突

转载 作者:太空宇宙 更新时间:2023-11-03 16:16:16 24 4
gpt4 key购买 nike

这个问题是this article的延伸.

在同样的情况下,我通过它的ProgID创建了一个WMP ActiveX的实例。

protected const string WMP_PROG_ID = "WMPlayer.OCX.7";

private dynamic _wmp;

protected virtual bool init(){
try{
_wmp = Activator.CreateInstance(Type.GetTypeFromProgID(WMP_PROG_ID));
}
catch{ return false; }
return connectEvent();
}

根据MSDN文档中,WMPlayer 对象中有一个 Error 事件和一个 error 属性。因此,我尝试以这种方式附加事件。

protected bool connectEvent(){
try{
_wmp.PlayStateChange += new StateHandler(_wmp_PlayStateChange);
//_wmp.Error += new Action(_wmp_ErrorEvent);
}
catch { return false; }
return true;
}

protected void _wmp_PlayStateChange(WMPlayerState state){
//do something I like
}

protected void _wmp_ErrorEvent(){
//do some error handling
}

如果我保留 //_wmp.Error += new Action(_wmp_ErrorEvent) 注释,没有编译错误,PlayStateChange 运行良好。

但是,如果我删除注释标记,则会出现运行时异常。Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:无法在“System.__ComObject”和“System.Action”之间应用运算符“+=”

这两个“错误”似乎是冲突的,因为 COM 不区分大小写。我该如何解决?我的目标是在不使用 AxWindowsMediaPlayer 的情况下附加到“错误”事件。

最佳答案

我遇到了与您非常相似的问题,但我遇到的是 Size。强类型的 ActiveX 控件重新定义了 Size,因此当表单设计者想要调整表单上控件的大小时,我需要将其转换回 Control

((Control)this.axLEAD1).Size = new System.Drawing.Size(298, 240);

如果您可以获得 com 对象的强类型类(通过添加引用或使用 tlbimp.exe ),您可以转换为强类型的 com 对象而不是 __ComObject 并拥有它使用正确的方法。

关于c# - 当我使用区分大小写的语言时如何解决 COM 中不区分大小写的名称冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15759269/

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