📄 index141.htm
字号:
<html>
<style type="text/css"><!--
.p9 { font-family: "宋体"; font-size: 9pt}a {text-transform: none; text-decoration: none;}
a:hover {text-decoration: underline; color: #FF0000;}
--></style>
<body background="../di2001.jpg">
<h3 align="center"><font COLOR="#AOAO99"></font></h3>
<table width="100%" border="1" cellspacing="1">
<tr><td><p align="center"><font color="#FF0000">如何向ATL-COM对象传送一个数组?</font></td></tr>
<tr><td><p>
</Br>
我想创建一个函数来向ATL-COM对象传送数组.<Br>
</Br>
如下代码的方法用于ACTIVEX中,可能对ATL-COM也有启发吧.<Br>
</Br>
CoInitialize(NULL);<Br>
CLSID m_clsid;<Br>
USES_CONVERSION;<Br>
::CLSIDFromString(T2OLE("ROUNDANALOG.RoundAnlgAARCtrl.1"), &m_clsid);<Br>
IDispatch FAR* pObj = (IDispatch FAR*)NULL;<Br>
CString str = "UpdateControl";<Br>
BSTR bstr = str.AllocSysString();<Br>
HRESULT hr = CoCreateInstance(m_clsid, NULL, CLSCTX_ALL, IID_IDispatch,<Br>
(void**)&pObj);<Br>
</Br>
SafeArrayAccessData(psa, (void**)&bstrArray);<Br>
bstrArray[0] = str.AllocSysString();<Br>
bstrArray[1] = str.AllocSysString();<Br>
SafeArrayUnaccessData(psa);<Br>
</Br>
VARIANTARG* pvars = new VARIANTARG[1];<Br>
VariantInit(&pvars[0]);<Br>
pvars[0].vt = VT_ARRAY|VT_BYREF|VT_BSTR;<Br>
pvars[0].pparray = &psa;<Br>
DISPID dispid;<Br>
</Br>
hr = pObj->GetIDsOfNames(IID_NULL, &bstr, 1,LOCALE_USER_DEFAULT, &dispid);<Br>
</Br>
DISPPARAMS disp = {pvars, &dispid, 1,1};<Br>
hr = pObj->Invoke(dispid, IID_NULL,<Br>
LOCALE_USER_DEFAULT,DISPATCH_PROPERTYPUT,&disp,NULL, NULL, NULL);<Br>
delete[] pvars;<Br>
pObj->Release();<Br>
CoUninitialize();<Br>
</Br>
在你的控制中建立如下并变量参考:<Br>
</Br>
void CRoundAnlgAARCtrl::SaveFunc(const VARIANT FAR& var)<Br>
{<Br>
// TODO: Add your dispatch handler code here<Br>
ASSERT(var.vt == VT_ARRAY | VT_BYREF | VT_BSTR);<Br>
SAFEARRAY* psa = *var.pparray;<Br>
}<Br>
</Br>
</Br>
</Br>
</p></td></tr>
</table>
</body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -