有什么方法可以避免在只需要几个方法时创建一个巨大的C#COM接口
问候所有,
我正在开发一个C#程序,它需要能够在Windows 7 Explorer的新ItemsView控件中获取热门项目的索引.幸运的是,Microsoft has provided a way通过UI自动化,通过查询控件的自定义属性来完成此操作. 不幸的是,System.Windows.Automation命名空间莫名其妙地似乎没有提供查询自定义属性的方法!这使我不得不完全抛弃C#Automation命名空间并仅使用非托管COM版本.一种方法是将所有自动化代码放在一个单独的C/C++LI模块中,并从我的C#应用??程序中调用它.但是,如果可能的话,我想避免使用此选项,因为它会为我的项目添加更多文件,而且我不得不担心32/64位问题等等. 另一个选择是使用ComImport属性来声明相关接口并通过COM-interop完成所有操作.这就是我想做的.但是,相关的接口,如IUIAutomation和IUIAutomationElement,正在变得更加巨大.他们总共有数百种方法,参考吨和大量的接口(我假设我还必须声明),几乎所有这些都是我永远不会使用的.我不认为UI自动化接口也在任何类型库中声明,所以我不能使用TLBIMP. 有什么方法可以避免手动将bajillion方法签名转换为C#,而只是声明我实际需要的十个左右的方法吗?我看到C#4.0添加了一个新的“动态”类型,可以缓解COM互操作;那与我的问题有关吗? 谢谢 解决方法
最重要的是(从C#调用COM方法的角度来看)方法以正确的顺序出现在界面中.如果你没有使用某个方法,你可以将它声明为无效并且不会发生任何不好的事情(除非你实际调用它!).这样您就不必编写正确的签名并定义所有其他类型等.例如,
[ComImport,Guid("30cbe57d-d9d0-452a-ab13-7ac5ac4825ee"),InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] interface IUIAutomation { void CompareElements(); void CompareRuntimeIds(); void GetRootElement(); // 50 or so other methods... // ... define only the signatures for the ones you actually need } 这些方法的定义应与它们在UIAutomationClient.h(在Windows SDK中)中出现的顺序完全相同. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |