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

C# 当我使用区分大小写的语言时,如何解决COM中不区分大小写的冲突名称,c#,com,case-sensitive,case-insensitive,wmp,C#,Com,Case Sensitive,Case Insensitive,Wmp,这个问题是问题的延伸 在相同的情况下,我通过其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));

这个问题是问题的延伸

在相同的情况下,我通过其
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();
}
根据文档,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
}
如果我对
/\u wmp.Error+=新操作(\u wmp\u ErrorEvent)
进行注释, 没有编译错误,
PlayStateChange
工作得很好

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

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

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

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

如果您可以为com对象获取强类型类(通过添加引用或使用),则可以将其强制转换为强类型com对象,而不是
\uu ComObject
,并使其使用正确的方法。

感谢您的想法,我尝试使用tlbimp convert wmp.dll,并将其反汇编。但是,只有
Error
属性,没有
Error
事件。我猜MS工具的转换也不能处理这个冲突问题。