none
CoCreateInstance 创建Office对象, 返回TYPE_E_CANTLOADLIBRARY(0x80029C4A)失败 RRS feed

  • 问题

  • 问题现象:使用CoCreateInstance创建Office对象,代码如下:

    HRESULT hr = CoCreateInstance(__uuidof(PowerPoint::Application), NULL, CLSCTX_LOCAL_SERVER, __uuidof(_Application), reinterpret_cast<void**>(&application_));

    返回TYPE_E_CANTLOADLIBRARY失败。

    在不同的机器上已知有两种现象

    1、以管理员身份运行我的程序,可以成功创建了

    2、以管理员身份运行我的程序,仍然失败

    我的分析:

    分析一:

    按我的理解,CoCreateInstance从注册表加载类型库的过程是

    1、首先到HKEY_CLASSES_ROOT\Interface\{riid}\中找到接口相关联的类型库

    2、再到HKEY_CLASSES_ROOT\Typelib\{tid}\中找到类型库

    按以上注册表路径寻找对应的类型库,均可以在磁盘上找到对应的MSPPT.OLB类型库文件

    分析二:

    使用LoadRegTypeLib方法,可以成功加载类型库

    hr = LoadRegTypeLib(office_ppt_tid, 2, 0, 0, &lib);

    分析三:

    使用CoGetClassObject可以得到IClassFactory,并且在任务管理器中已经启动PowerPoint.exe。

    再用factory->CreateInstance时返回失败。

    我的提问:

    请问有人能根据CoCreateInstance方法内部实现,推导出引发该问题现象的可能的原因吗?非常感谢!




    • 已编辑 hsrao 2017年3月10日 8:02
    2017年3月10日 2:43