获取COM对象的信息或属性

时间:2015-01-16 10:10:56

标签: c# api winapi object com

我正在编写一个工具,其中包含一个带有清单文件(Sxs / RegFree)的COM组件(例如DLL)。我的工具遍历所有类ID,并应检查是否可以使用此类ID创建实例。

但是,有一些问题。一些COM对象(类)以某种方式编程,我无法创建实例,因为它是被禁止的。

在我的一次迭代中,我的工具崩溃,因为它想要从禁止它的对象创建一个实例。即便尝试......捕获也无济于事。使用Visual Studio 2013进行调试时,我得到的信息是堆有错误。

所以我的问题是:获取有关COM对象的一些信息是不可能的,例如,如果有人可以在创建实例之前从这个Class-ID创建实例?

编辑:以下是我创建实例的代码:

var clsid = new Guid(guid);
Guid IID_IUnknown = new Guid("00000000-0000-0000-C000-000000000046");
object instance = null;
hResult = CoCreateInstance(ref clsid, null, CLSCTX_INPROC_SERVER, ref IID_IUnknown, out instance);
if (hResult > 0x7FFFFFFF)
{
    // ...
}

1 个答案:

答案 0 :(得分:-1)

某些CLSID没有直接访问权限,只有在创建真实对象时才适用于COM系统。 你创建一个像“VBScript”CLSID的对象:
“{B54F3741-5B07-11CF-A4B0-00AA004A55E8}”
COM自动创建另一个供内部使用的对象,如: {00000323-0000-0000-C000-000000000046}(CLSID_StdGlobalInterfaceTable)
像这样,最后还有很多其他人只需要管理。 见:
Standards Assignments