Your code will look like this. The function nvocation is in pDisp->Invoke, before it you need the Disp ID. All other code is pure initialisations.
IUnknown* pUnk;
IDispatch* pDisp;
HRESULT hResult;
OleInitialize(NULL);
hResult=::CLSIDFromProgID("ObjecBlablabla.Application",&clsid);
if(FAILED(hResult))
{
::MessageBox(NULL,"application is not found","error",MB_OK|MB_ICONEXCLAMATION);
return;
}
setDispGuid(IID_IDispatch);
setUnkGuid(IID_IUnknown);
hResult=::CoCreateInstance(clsid,NULL,CLSCTX_SERVER,gUnk.toGUID(),(void FAR*FAR*)&pUnk);
if(FAILED(hResult))
{
::MessageBox(NULL,"failed IUnknown","error",MB_OK|MB_ICONEXCLAMATION);
return;
}
hResult=pUnk->QueryInterface(gDisp.toGUID(),(void FAR* FAR*)&pDisp);
if(FAILED(hResult))
{
MessageBox(NULL,"this class doesn't suppport IDispatch","warning",MB_OK|MB_ICONEXCLAMATION);
return;
}
IUnknown* pUnk;
IDispatch* pDisp;
HRESULT hResult;
DISPID dispid;
DISPPARAMS dpar;
DISPID dPut=DISPID_PROPERTYPUT;
VARIANTARG varg;
unsigned short* method=L"Visible";
dpar.rgvarg=&varg;
dpar.rgdispidNamedArgs=&dPut;
dpar.cArgs=1;
dpar.cNamedArgs=1;
::VariantInit(&varg);
V_VT(&varg)=VT_BOOL;
V_BOOL(&varg)=_visible;
hResult=pDisp->GetIDsOfNames(IID_NULL,&method,1,LOCALE_SYSTEM_DEFAULT,&dispid);
if(FAILED(hResult))
{
::MessageBox(NULL,"function doesn't exists","error",MB_OK|MB_ICONEXCLAMATION);
::VariantClear(&varg);
}
hResult=pDisp->Invoke(dispid,IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_PROPERTYPUT,
&dpar,NULL,NULL,NULL);
if(FAILED(hResult))
{
::MessageBox(NULL,"can't execute function","error",MB_OK|MB_ICONEXCLAMATION);
::VariantClear(&varg);
}
::VariantClear(&varg); [sig][/sig]