本文整理汇总了C++中IDispatch_Invoke函数的典型用法代码示例。如果您正苦于以下问题:C++ IDispatch_Invoke函数的具体用法?C++ IDispatch_Invoke怎么用?C++ IDispatch_Invoke使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了IDispatch_Invoke函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ClDispatch_Invoke
static HRESULT WINAPI ClDispatch_Invoke(IDispatch *iface, DISPID dispIdMember, REFIID riid,
LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
DocHost *This = impl_from_IDispatch(iface);
TRACE("(%p)->(%s %s %d %04x %p %p %p %p)\n", This, debugstr_dispid(dispIdMember),
debugstr_guid(riid), lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
switch(dispIdMember) {
case DISPID_AMBIENT_USERMODE:
case DISPID_AMBIENT_DLCONTROL:
case DISPID_AMBIENT_USERAGENT:
case DISPID_AMBIENT_PALETTE:
if(!This->client_disp)
return E_FAIL;
return IDispatch_Invoke(This->client_disp, dispIdMember, riid, lcid, wFlags,
pDispParams, pVarResult, pExcepInfo, puArgErr);
case DISPID_AMBIENT_OFFLINEIFNOTCONNECTED:
V_VT(pVarResult) = VT_BOOL;
V_BOOL(pVarResult) = This->offline;
return S_OK;
case DISPID_AMBIENT_SILENT:
V_VT(pVarResult) = VT_BOOL;
V_BOOL(pVarResult) = This->offline;
return S_OK;
}
FIXME("unhandled dispid %d\n", dispIdMember);
return E_NOTIMPL;
}
示例2: update_readystate
static void update_readystate(PluginHost *host)
{
DISPPARAMS params = {NULL,NULL,0,0};
IDispatchEx *dispex;
IDispatch *disp;
ULONG err = 0;
VARIANT v;
HRESULT hres;
hres = IUnknown_QueryInterface(host->plugin_unk, &IID_IDispatchEx, (void**)&dispex);
if(SUCCEEDED(hres)) {
FIXME("Use IDispatchEx\n");
IDispatchEx_Release(dispex);
}
hres = IUnknown_QueryInterface(host->plugin_unk, &IID_IDispatch, (void**)&disp);
if(FAILED(hres))
return;
hres = IDispatch_Invoke(disp, DISPID_READYSTATE, &IID_NULL, 0, DISPATCH_PROPERTYGET, ¶ms, &v, NULL, &err);
IDispatch_Release(disp);
if(SUCCEEDED(hres)) {
/* FIXME: make plugin readystate affect document readystate */
TRACE("readystate = %s\n", debugstr_variant(&v));
VariantClear(&v);
}
}
示例3: check_script_safety
static BOOL check_script_safety(PluginHost *host)
{
DISPPARAMS params = {NULL,NULL,0,0};
DWORD policy_size, policy;
struct CONFIRMSAFETY cs;
BYTE *ppolicy;
ULONG err = 0;
VARIANT v;
HRESULT hres;
cs.clsid = host->clsid;
cs.pUnk = host->plugin_unk;
cs.dwFlags = 0;
hres = IInternetHostSecurityManager_QueryCustomPolicy(&host->doc->IInternetHostSecurityManager_iface,
&GUID_CUSTOM_CONFIRMOBJECTSAFETY, &ppolicy, &policy_size, (BYTE*)&cs, sizeof(cs), 0);
if(FAILED(hres))
return FALSE;
policy = *(DWORD*)ppolicy;
CoTaskMemFree(ppolicy);
if(policy != URLPOLICY_ALLOW)
return FALSE;
V_VT(&v) = VT_EMPTY;
hres = IDispatch_Invoke(host->disp, DISPID_SECURITYCTX, &IID_NULL, 0, DISPATCH_PROPERTYGET, ¶ms, &v, NULL, &err);
if(SUCCEEDED(hres)) {
FIXME("Handle security ctx %s\n", debugstr_variant(&v));
return FALSE;
}
return TRUE;
}
示例4: get_doc_ready_state
static HRESULT get_doc_ready_state(DocHost *This, READYSTATE *ret)
{
DISPPARAMS dp = {NULL,NULL,0,0};
IDispatch *disp;
EXCEPINFO ei;
VARIANT var;
HRESULT hres;
hres = IUnknown_QueryInterface(This->document, &IID_IDispatch, (void**)&disp);
if(FAILED(hres))
return hres;
hres = IDispatch_Invoke(disp, DISPID_READYSTATE, &IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET,
&dp, &var, &ei, NULL);
IDispatch_Release(disp);
if(FAILED(hres)) {
WARN("Invoke(DISPID_READYSTATE failed: %08x\n", hres);
return hres;
}
if(V_VT(&var) != VT_I4) {
WARN("V_VT(var) = %d\n", V_VT(&var));
VariantClear(&var);
return E_FAIL;
}
*ret = V_I4(&var);
return S_OK;
}
示例5: call_sink
void call_sink(ConnectionPoint *This, DISPID dispid, DISPPARAMS *dispparams)
{
DWORD i;
for(i=0; i<This->sinks_size; i++) {
if(This->sinks[i])
IDispatch_Invoke(This->sinks[i], dispid, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD, dispparams, NULL, NULL, NULL);
}
}
示例6: IMediaPosition_fnInvoke
static HRESULT WINAPI
IMediaPosition_fnInvoke(IMediaPosition* iface,DISPID DispId, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarRes, EXCEPINFO* pExcepInfo, UINT* puArgErr)
{
CFilterGraph_THIS(iface,mediaposition);
TRACE("(%p)->()\n",This);
return IDispatch_Invoke(
CFilterGraph_IDispatch(This),
DispId,riid,lcid,wFlags,pDispParams,pVarRes,pExcepInfo,puArgErr);
}
示例7: httprequest_setreadystate
static void httprequest_setreadystate(httprequest *This, READYSTATE state)
{
READYSTATE last = This->state;
This->state = state;
if (This->sink && last != state)
{
DISPPARAMS params;
memset(¶ms, 0, sizeof(params));
IDispatch_Invoke(This->sink, 0, &IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, ¶ms, 0, 0, 0);
}
}
示例8: call_cp_func
static HRESULT call_cp_func(IDispatch *disp, DISPID dispid, HTMLEventObj *event_obj, VARIANT *retv)
{
DISPPARAMS dp = {NULL,NULL,0,0};
VARIANT event_arg;
ULONG argerr;
EXCEPINFO ei;
if(event_obj) {
V_VT(&event_arg) = VT_DISPATCH;
V_DISPATCH(&event_arg) = (IDispatch*)&event_obj->IHTMLEventObj_iface;
dp.rgvarg = &event_arg;
dp.cArgs = 1;
}
memset(&ei, 0, sizeof(ei));
return IDispatch_Invoke(disp, dispid, &IID_NULL, 0, DISPATCH_METHOD, &dp, retv, &ei, &argerr);
}
示例9: call_cp_func
static HRESULT call_cp_func(IDispatch *disp, DISPID dispid)
{
DISPPARAMS dp = {NULL,NULL,0,0};
ULONG argerr;
EXCEPINFO ei;
VARIANT vres;
HRESULT hres;
V_VT(&vres) = VT_EMPTY;
memset(&ei, 0, sizeof(ei));
hres = IDispatch_Invoke(disp, dispid, &IID_NULL, 0, DISPATCH_METHOD, &dp, &vres, &ei, &argerr);
if(SUCCEEDED(hres) && V_VT(&vres) != VT_EMPTY) {
FIXME("handle result %s\n", debugstr_variant(&vres));
VariantClear(&vres);
}
return hres;
}
示例10: disp_propput
HRESULT disp_propput(script_ctx_t *ctx, IDispatch *disp, DISPID id, WORD flags, DISPPARAMS *dp)
{
IDispatchEx *dispex;
EXCEPINFO ei = {0};
HRESULT hres;
hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
if(SUCCEEDED(hres)) {
hres = IDispatchEx_InvokeEx(dispex, id, ctx->lcid, flags, dp, NULL, &ei, NULL /* FIXME! */);
IDispatchEx_Release(dispex);
}else {
ULONG err = 0;
TRACE("using IDispatch\n");
hres = IDispatch_Invoke(disp, id, &IID_NULL, ctx->lcid, flags, dp, NULL, &ei, &err);
}
return hres;
}
示例11: call_disp_func
static HRESULT call_disp_func(IDispatch *disp, DISPPARAMS *dp, VARIANT *retv)
{
IDispatchEx *dispex;
EXCEPINFO ei;
HRESULT hres;
memset(&ei, 0, sizeof(ei));
hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
if(SUCCEEDED(hres)) {
hres = IDispatchEx_InvokeEx(dispex, 0, GetUserDefaultLCID(), DISPATCH_METHOD, dp, retv, &ei, NULL);
IDispatchEx_Release(dispex);
}else {
TRACE("Could not get IDispatchEx interface: %08x\n", hres);
hres = IDispatch_Invoke(disp, 0, &IID_NULL, GetUserDefaultLCID(), DISPATCH_METHOD,
dp, retv, &ei, NULL);
}
return hres;
}
示例12: invoke_disp_value
static HRESULT invoke_disp_value(DispatchEx *This, IDispatch *func_disp, LCID lcid, WORD flags, DISPPARAMS *dp,
VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller)
{
DISPID named_arg = DISPID_THIS;
DISPPARAMS new_dp = {NULL, &named_arg, 0, 1};
IDispatchEx *dispex;
HRESULT hres;
if(dp->cNamedArgs) {
FIXME("named args not supported\n");
return E_NOTIMPL;
}
new_dp.rgvarg = heap_alloc((dp->cArgs+1)*sizeof(VARIANTARG));
if(!new_dp.rgvarg)
return E_OUTOFMEMORY;
new_dp.cArgs = dp->cArgs+1;
memcpy(new_dp.rgvarg+1, dp->rgvarg, dp->cArgs*sizeof(VARIANTARG));
V_VT(new_dp.rgvarg) = VT_DISPATCH;
V_DISPATCH(new_dp.rgvarg) = (IDispatch*)&This->IDispatchEx_iface;
hres = IDispatch_QueryInterface(func_disp, &IID_IDispatchEx, (void**)&dispex);
TRACE(">>>\n");
if(SUCCEEDED(hres)) {
hres = IDispatchEx_InvokeEx(dispex, DISPID_VALUE, lcid, flags, &new_dp, res, ei, caller);
IDispatchEx_Release(dispex);
}else {
ULONG err = 0;
hres = IDispatch_Invoke(func_disp, DISPID_VALUE, &IID_NULL, lcid, flags, &new_dp, res, ei, &err);
}
if(SUCCEEDED(hres))
TRACE("<<< %s\n", debugstr_variant(res));
else
WARN("<<< %08x\n", hres);
heap_free(new_dp.rgvarg);
return hres;
}
示例13: notif_enabled
static void notif_enabled(PluginHost *plugin_host)
{
DISPPARAMS args = {NULL, NULL, 0, 0};
IDispatch *disp;
ULONG err = 0;
VARIANT res;
HRESULT hres;
hres = IUnknown_QueryInterface(plugin_host->plugin_unk, &IID_IDispatch, (void**)&disp);
if(FAILED(hres)) {
FIXME("Could not get IDispatch iface: %08x\n", hres);
return;
}
V_VT(&res) = VT_EMPTY;
hres = IDispatch_Invoke(disp, DISPID_ENABLED, &IID_NULL, 0/*FIXME*/, DISPATCH_PROPERTYGET, &args, &res, NULL, &err);
IDispatch_Release(disp);
if(SUCCEEDED(hres)) {
FIXME("Got enabled %s\n", debugstr_variant(&res));
VariantClear(&res);
}
}
示例14: get_client_disp_property
HRESULT get_client_disp_property(IOleClientSite *client, DISPID dispid, VARIANT *res)
{
IDispatch *disp = NULL;
DISPPARAMS dispparams = {NULL, 0};
UINT err;
HRESULT hres;
hres = IOleClientSite_QueryInterface(client, &IID_IDispatch, (void**)&disp);
if(FAILED(hres)) {
TRACE("Could not get IDispatch\n");
return hres;
}
VariantInit(res);
hres = IDispatch_Invoke(disp, dispid, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYGET, &dispparams, res, NULL, &err);
IDispatch_Release(disp);
return hres;
}
示例15: disp_call
HRESULT disp_call(script_ctx_t *ctx, IDispatch *disp, DISPID id, DISPPARAMS *dp, VARIANT *retv)
{
const WORD flags = DISPATCH_METHOD|(retv ? DISPATCH_PROPERTYGET : 0);
IDispatchEx *dispex;
EXCEPINFO ei;
HRESULT hres;
memset(&ei, 0, sizeof(ei));
if(retv)
V_VT(retv) = VT_EMPTY;
hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
if(FAILED(hres)) {
UINT err = 0;
TRACE("using IDispatch\n");
return IDispatch_Invoke(disp, id, &IID_NULL, ctx->lcid, flags, dp, retv, &ei, &err);
}
hres = IDispatchEx_InvokeEx(dispex, id, ctx->lcid, flags, dp, retv, &ei, NULL /* CALLER_FIXME */);
IDispatchEx_Release(dispex);
return hres;
}