我正在编写一个工具,其中包含一个带有清单文件(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)
{
// ...
}
答案 0 :(得分:-1)
某些CLSID没有直接访问权限,只有在创建真实对象时才适用于COM系统。
你创建一个像“VBScript”CLSID的对象:
“{B54F3741-5B07-11CF-A4B0-00AA004A55E8}”
COM自动创建另一个供内部使用的对象,如:
{00000323-0000-0000-C000-000000000046}(CLSID_StdGlobalInterfaceTable)
像这样,最后还有很多其他人只需要管理。
见:
Standards Assignments