gpt4 book ai didi

c# - 找出哪些接口(interface)对于 COM 对象是可查询的?

转载 作者:太空狗 更新时间:2023-10-29 17:39:39 25 4
gpt4 key购买 nike

我正在使用 ESRI 的 ArcObjects COM 库,我非常努力地想弄清楚“选择”应该是什么类型:

IMxDocument doc = m_application.Document as IMxDocument;
object selected = doc.SelectedItem;

SelectedItem 返回一个comobject (Not Null),一般表示当前选中的数据类型。但是我不知道我应该把它转换到什么类型。当我调试它时,我没有真正看到任何有用的东西:

http://imgur.com/Yfo6G

(设置值后看debug)

ESRI 的 ArcObjects 库很大,而且文档很少,我根本搞不懂。我什至手动检查了大约 50 个我认为应该的接口(interface)。

有人知道我如何解决这个问题吗?

编辑澄清他们的文档绝对没有帮助,他们的论坛也没有帮助。

最佳答案

阅读您的问题、答案和评论后,您可能需要编写一个实用程序来通过暴力查找答案。

使用反射从互操作程序集中抓取接口(interface)列表,然后简单地遍历此列表并查看您的对象是否依次支持每个接口(interface)。

更新

一些示例代码:

    object unknown = //your com object...

Type someComObjectType = typeof(ExampleTypeInInteropAssembly);

Assembly interopAssembly = someComObjectType.Assembly;

Func<Type, bool> implementsInterface = iface =>
{
try
{
Marshal.GetComInterfaceForObject(unknown, iface);
return true;
}
catch (InvalidCastException)
{
return false;
}
};

List<Type> supportedInterfaces = interopAssembly.
GetTypes().
Where(t => t.IsInterface).
Where(implementsInterface).
ToList();

if (supportedInterfaces.Count > 0)
{
supportedInterfaces.ForEach(Console.WriteLine);
}
else
{
Console.WriteLine("No supported interfaces found :(");
}

关于c# - 找出哪些接口(interface)对于 COM 对象是可查询的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4338700/

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