免费注册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方法结果类型通常应该是HRESULT
s。还有其他问题(正如其他人所指出的那样)以及您真正未发布的代码可能会有其他问题。尽管如此,你解释它的情况可以很好地解决清单,你可以使用RegFreeComPictureDisp
解决方案与你的代码片段(client,server,IDL,manifest excerpt)作为修复你的项目的参考(Trac,Subversion)。
最后它是疯狂的bug:我们有CEF(chromiumembedded)组件。并且在没有CEfApp对象的情况下进行了初始化。这是一个非常疯狂的问题:ActiveX注册工作正常。没有它发货问题。正常CEF初始化(或禁用CEF初始化)后,它适用于两种情况!
以上是关于免费注册com和Dispatch LPPICTUREDISP的主要内容,如果未能解决你的问题,请参考以下文章
drf框架 2 drf框架的请求生命周期(as_view和dispatch方法), 请求解析渲染响应异常, 序列化组件 ,ORM配置回顾(media文件配置),应用在settings.py中(代码片