资料收集站

SDL

Wednesday
Dec 03rd
Text size
  • Increase font size
  • Default font size
  • Decrease font size

我想创建一个函数来向ATL-COM对象传送数组.

如下代码的方法用于ACTIVEX中,可能对ATL-COM也有启发吧.

CoInitialize(NULL);

 CLSID m_clsid;

 USES_CONVERSION;

 ::CLSIDFromString(T2OLE("ROUNDANALOG.RoundAnlgAARCtrl.1"), &m_clsid);

 IDispatch FAR* pObj = (IDispatch FAR*)NULL;

 CString str = "UpdateControl";

 BSTR bstr = str.AllocSysString();

 HRESULT hr = CoCreateInstance(m_clsid, NULL, CLSCTX_ALL, IID_IDispatch,

(void**)&pObj);

 SafeArrayAccessData(psa, (void**)&bstrArray);

 bstrArray[0] = str.AllocSysString();

 bstrArray[1] = str.AllocSysString();

 SafeArrayUnaccessData(psa);

VARIANTARG* pvars = new VARIANTARG[1];

 VariantInit(&pvars[0]);

 pvars[0].vt = VT_ARRAY|VT_BYREF|VT_BSTR;

 pvars[0].pparray = &psa;

 DISPID dispid;

 hr = pObj->GetIDsOfNames(IID_NULL, &bstr, 1,LOCALE_USER_DEFAULT, &dispid);

DISPPARAMS disp = {pvars, &dispid, 1,1};

 hr = pObj->Invoke(dispid, IID_NULL,

LOCALE_USER_DEFAULT,DISPATCH_PROPERTYPUT,&disp,NULL, NULL, NULL);

 delete[] pvars;

 pObj->Release();

 CoUninitialize();

在你的控制中建立如下并变量参考:

void CRoundAnlgAARCtrl::SaveFunc(const VARIANT FAR& var)


 // TODO: Add your dispatch handler code here

 ASSERT(var.vt == VT_ARRAY | VT_BYREF | VT_BSTR);

 SAFEARRAY* psa = *var.pparray;

Comments (0)Add Comment

Write comment

busy
 

Google 搜索

在线用户

We have 64 guests online