大佬教程收集整理的这篇文章主要介绍了有什么方法可以避免在只需要几个方法时创建一个巨大的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位问题等等.
另一个选择是使用COR_270_11845@Import属性来声明相关接口并通过COM-interop完成所有操作.这就是我想做的.但是,相关的接口,如iuiAutomation和iuiAutomationElement,正在变得更加巨大.他们总共有数百种方法,参考吨和大量的接口(我假设我还必须声明),几乎所有这些都是我永远不会使用的.我不认为UI自动化接口也在任何类型库中声明,所以我不能使用TLBIMP.
有什么方法可以避免手动将bajillion方法签名转换为C#,而只是声明我实际需要的十个左右的方法吗?我看到C#4.0添加了一个新的“动态”类型,可以缓解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中)中出现的顺序完全相同.
以上是大佬教程为你收集整理的有什么方法可以避免在只需要几个方法时创建一个巨大的C#COM接口包装器?全部内容,希望文章能够帮你解决有什么方法可以避免在只需要几个方法时创建一个巨大的C#COM接口包装器?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。