免费注册com和Dispatch LPPICTUREDISP

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了免费注册com和Dispatch LPPICTUREDISP相关的知识,希望对你有一定的参考价值。

这是我的COM界面:

[id(2)] boolean Init(BSTR User, BSTR Password);
[id(3)] boolean SetBitmap(BSTR szObjectType, IPictureDisp* szBitmap);

如果COM接口已注册,则以下Init()函数可用,或者使用并排程序集(sxs)与应用程序的清单一起使用。

Init(LPCTSTR User, LPCTSTR Password)
{
    BOOL result;
    static BYTE parms[] =
        VTS_BSTR VTS_BSTR;
    InvokeHelper(0x2, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms,
         User, Password);
    return result;
}

但是,以下SetBitmap()函数仅在COM接口注册时才有效!

BOOL SetBitmap(LPCTSTR szObjectType, LPPICTUREDISP szBitmap)
{
    BOOL result;
    static BYTE parms[] =
        VTS_BSTR VTS_DISPATCH;
    InvokeHelper(0x3, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms,
        szObjectType, szBitmap);
    return result;
}
  • 如果我使用配置了应用程序清单的COM接口,则函数调用将失败,并显示错误E_UNEXPECTED
  • 如果我用VTS_DISPATCH替换VTS_BSTR,函数调用成功并且有效。在这种情况下,看起来调度程序无法调度该对象。

关于发生了什么的任何想法?

答案

IPictureDisp参数不是注册免费COM的问题。

这里看来是错误的是您创建清单XML的方式。如果为ActiveX DLL定义了IDL,并且库具有实际的TLB,则客户端二进制清单应该具有引用而不是DLL的清单:

<dependentAssembly>
  <assemblyIdentity name='dlgd' type='win32' version='6.0.0.0'
    processorArchitecture='amd64' />
  <file name="dlgd.ocx" hashalg="SHA1">
    <comClass clsid="{guiD}" tlbid="{guiD}" description="sDlg Control"/>
    <typelib tlbid="{guiD}" version="1.0" helpdir=""/>
  </file>
</dependentAssembly>

此外,boolean IDL方法结果类型通常应该是HRESULTs。还有其他问题(正如其他人所指出的那样)以及您真正未发布的代码可能会有其他问题。尽管如此,你解释它的情况可以很好地解决清单,你可以使用RegFreeComPictureDisp解决方案与你的代码片段(clientserverIDLmanifest excerpt)作为修复你的项目的参考(TracSubversion)。

另一答案

最后它是疯狂的bug:我们有CEF(chromiumembedded)组件。并且在没有CEfApp对象的情况下进行了初始化。这是一个非常疯狂的问题:ActiveX注册工作正常。没有它发货问题。正常CEF初始化(或禁用CEF初始化)后,它适用于两种情况!

以上是关于免费注册com和Dispatch LPPICTUREDISP的主要内容,如果未能解决你的问题,请参考以下文章

vuex中commit和dispatch

drf框架 2 drf框架的请求生命周期(as_view和dispatch方法), 请求解析渲染响应异常, 序列化组件 ,ORM配置回顾(media文件配置),应用在settings.py中(代码片

win32com.client.Dispatch + Cherrypy = CoInitialize 没有被调用

Dispatch.yaml 路由到特定模块版本?

event_base_dispatch() 是如何工作的?

dispatch_once 的秘密