3,245
社区成员
发帖
与我相关
我的任务
分享
typedef struct YSMEMBER
{
int nOnline; //0-离线;1-上线;
int nStatus; //0-在线;1-在线免打扰
TCHAR pszExtno[10]; // 分机号码
TCHAR pszName[20]; // 名字
}YSMEMBER, *LPYSMEMBER;
void CMyVariantCtrl::ExportMember()
{
YSMEMBER *pMember = NULL;
HRESULT hr;
SAFEARRAY* pSAMember = NULL;
SAFEARRAYBOUND rgbounds = {10,0};
pSAMember = SafeArrayCreate(VT_VARIANT, 1, &rgbounds);// 1为数组的维数
hr = SafeArrayAccessData(pSAMember, reinterpret_cast<PVOID*>(&pMember));
for(int i = 0; i < 10; i++){
pMember[i].nOnline = 1;
pMember[i].nStatus = 2;
_tcscpy(pMember[i].pszExtno, _T("1408"));
_tcscpy(pMember[i].pszName, _T("软件"));
}
hr = SafeArrayUnaccessData(pSAMember);
VARIANT var;
VariantInit(&var);
var.vt = VT_ARRAY|VT_UI1;
var.parray = pSAMember;
FireOnExportMember(10, &var);// 事件原型为FireOnExportMember(long nCount, VARIANT FAR* pVarMember)
VariantClear(&var);
}
<OBJECT id = Extend align=baseline height=0 width=0 border=0 CLASSID="CLSID:D51949BA-6BC2-47CF-95CC-43F3FD96790D" name=Extend codebase="Extend.ocx"></OBJECT>
Extend.ExportMember()// 调用方法,触发事件
VARIANT CMyHtmlDlgDlg::GetStringList()
{
VARIANT varStrList;
::VariantInit(&varStrList);
CComSafeArray<BSTR> m_oArrSrInfo;
BSTR bstr1, bstr2;
bstr1 = SysAllocString(L"hello");
bstr2 = SysAllocString(L"world");
m_oArrSrInfo.Add(bstr1);
m_oArrSrInfo.Add(bstr2);
V_VT(&varStrList) = VT_VARIANT | VT_ARRAY;
V_ARRAY(&varStrList) = m_oArrSrInfo;
SysFreeString(bstr1);
SysFreeString(bstr2);
return varStrList.Detach();
}
function GetMsgList()
{
var msgList = new VBArray(window.external.GetStringList()).toArray();
}
STDMETHODIMP CmyCerts::GetArray1(BSTR inCert, VARIANT* outCert)
{
//m_sa在h文件中定义:CComSafeArray <VARIANT> m_sa;
VariantInit(outCert);
m_sa.Add(CComVariant(_T("aaa")));
m_sa.Add(CComVariant(_T("bbb")));
m_sa.Add(CComVariant(_T("ccc")));
CComVariant var(m_sa);
var.Detach(outCert);
return S_OK;
}