事件接口如下:
dispinterface _ITestEvents
{
  properties:
  methods:
  [id(1), helpstring("method TestEvent")] void TestEvent([in] long a, [in] long b, [in] BSTR Text);
};在连接点代理类中:
template <class T>
class CProxy_ITestEvents : public IConnectionPointImpl<T, &DIID__ITestEvents, CComDynamicUnkArray>
{
 //Warning this class may be recreated by the wizard.
public:
 VOID Fire_TestEvent()
 {
    T* pT = static_cast<T*>(this);    int nConnectionIndex;
    CComVariant* pvars = new CComVariant[3];
    int nConnections = m_vec.GetSize();    for( nConnectionIndex=0; nConnectionIndex<nConnections; ++nConnectionIndex)
    {
pT->Lock(); CComPtr<IUnknown> sp = m_vec.GetAt(nConnectionIndex);
pT->Unlock();
IDispatch* pDispatch = reinterpret_cast<IDispatch*>(sp.p);
if( pDispatch!=NULL )
{
    pvars[0].vt = VT_I4;
    pvars[0].lVal = pInfo->IsSuccessful();
    pvars[1].vt = VT_I4;
    pvars[1].lVal = pInfo->ErrorCode();             //通过下面的pDispatch->Invoke(0x01, ...)回调客户的事件代码,但是当有中文字符时却无法触发客户端的事件,错误:Warning: automation argument coercion              //方法1:
    pvars[2] = "abbbbdd";     //不行, Warning: automation argument coercion failed.
             //方法2:
    pvars[2].vt = VT_BSTR;
    pvars[2].bstrVal = _com_util::ConvertStringToBSTR("23456");  //可以,没有中文字符。             //方法3:
    pvars[2].vt = VT_BSTR;
    pvars[2].bstrVal = _com_util::ConvertStringToBSTR("哈哈");  //不可以,有中文字符。Warning: automation argument coercion failed.
    DISPPARAMS disp = { pvars, NULL, 3, 0 };
    pDispatch->Invoke(0x01, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, NULL, NULL, NULL);
}
      }
      delete [] pvars;
}
谢谢!!!