参数类型是VARIANT的安全数组,安全数组的类型是BSTR类型的。
就是通过事件传过来一组字符串。不知道在Delphi中如何解析出这些字符串。大家可以参考一下我VC++COM的一些代码。组件部份
VARIANT vtIPList;
VariantInit(&vtIPList);
vtIPList.vt = VT_ARRAY | VT_VARIANT;
SAFEARRAYBOUND sab[2]; sab[0].lLbound = 0; sab[0].cElements = m_mapClient.size();
sab[1].lLbound = 0; sab[1].cElements = 1;
vtIPList.parray = SafeArrayCreate(VT_VARIANT,2,sab); std::map<CCommSocket*,ClientInfo>::iterator it = m_mapClient.begin();
int i = 0 ;
for ( it ; it != m_mapClient.end() ; it ++ )
{
long indices[] = {i,0};
VARIANT vValue;
VariantInit(&vValue);
vValue.vt = VT_BSTR; vValue.bstrVal = (*it).first->GetIP().AllocSysString();
SafeArrayPutElement(vtIPList.parray,indices,&vValue);
VariantClear(&vValue);
i++;
}
g_pSvrCtrl->Fire_OnRefreshIPList(vtIPList);Delphi处理事件部份
procedure TForm1.SvrSocket1RefreshIPList(Sender: TObject; vtaIPList: OleVariant);begin
    if ( TVarData(vtaIPList).vType = varArray ) then
    begin
//如何处理    end else
    begin
      ShowMessage(inttostr(TVarData(vtaIPList).vType));
    end
end;