加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 互操作程序集中的名称大小写错误

发布时间:2020-12-15 08:46:16 所属栏目:百科 来源:网络整理
导读:我有一个带有类型库的VC COM组件.该组件的类型库声明了一个接口和一个co-class: [ object,uuid( ActualUuidHere),dual,nonextensible,oleautomation,hidden,helpstring( ActualHelpStringHere )]interface IWorkflow : IDispatch { //irrelevant properties
我有一个带有类型库的VC COM组件.该组件的类型库声明了一个接口和一个co-class:
[
    object,uuid( ActualUuidHere),dual,nonextensible,oleautomation,hidden,helpstring( ActualHelpStringHere )
]
interface IWorkflow : IDispatch 
{
    //irrelevant properties here    
}

[
    uuid(ActualClassIdHere),noncreatable
]
coclass Workflow {
    [default] interface IWorkflow;
};

为了从C#应用程序中使用组件,我添加了对C#项目的引用,并生成了一个interop程序集.

在Visual Studio 2003的对象浏览器中,我看到interop包含:

public abstract interface IWorkflow;
public abstract interface workflow : IWorkflow;
public class workflowClass : System.Object;

很明显,由于某种原因,类和接口的名称大小写不同.对于在同一类型库中声明的其他20个接口,这不会发生 – 对于它们,ISomething对应于Something和SomethingClass.

我查看了项目的.idl文件 – 标识符Workflow在其他任何地方都没有使用过.

这种奇怪的行为是什么原因以及它如何解决?

解决方法

查看您的代码,看看是否有任何参数,属性或方法名称具有“工作流程”的确切拼写和大小写.它几乎肯定是COM接口函数的参数.将名称更改为paramWorkflow,您的问题应该消失.

为什么会这样?类型库工具中存在一个错误,它会在内部以不区分大小写的方式存储标识符.因此,如果您有两个具有不同capatilization的名称,它们将存储在同一个插槽中.然后在生成时直接使用这些名称,以便发出不同的外壳.

解决此问题的方法是通过创建不同的名称来防止冲突.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读