我在作一个自动向MSN发消息的程序。
基本思路如下:
1、用IMSIMHost组件得到IIMService interface;
2、用IIMService接口与消息的接收者建立session;
3、用IIMSession接口的“sendtext”方法给对方发消息。
可是,在用IMSIMHost的“logon”方法登陆的时候出错了。具体代码如下,请高手指教:
::CoInitialize(NULL);
HRESULT hr; MSIMCliSDKLib::IMSIMHost* pmh;
MSIMCliSDKLib::IIMService* pMs;
VARIANT vr1,vr2;
VARIANT varState;
VARIANT varDis;
VARIANT varData;
VARIANT  var;
hr = ::CoCreateInstance(CLSID_MSIMHost,NULL,
CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER,
IID_IMSIMHost,(void**)&pmh); vr1.vt = VT_BSTR;
_bstr_t    tmp_bstr_t("DEFAULT");
vr1.bstrVal = tmp_bstr_t;
vr2.vt = VT_BOOL;
vr2.boolVal = 0;

hr = pmh->CreateContext(vr1,vr2,(IDispatch**)&pMs); VariantInit(&varData);
VariantInit(&varDis);
VariantInit(&varState);


//hr = pMs->GetLocalState(&varState,&varDis,&varData); _bstr_t log[4];
_bstr_t address("[email protected]");
_bstr_t name("ding");
_bstr_t password("123456");
_bstr_t domain("fukuyama.dns.local");
log[0] = address;
log[1] = name;
log[2] = password;
log[3] = domain;
VariantInit(&var);
var.vt = VT_ARRAY | VT_BSTR; SAFEARRAYBOUND bounds = {4, 0};
SAFEARRAY* psa = SafeArrayCreate(VT_BSTR, 1, &bounds); bstr_t * bArray;
SafeArrayAccessData(psa, reinterpret_cast<void**> (&bArray));
bArray[0] = address; 
bArray[1] = name; 
bArray[2] = password; 
bArray[3] = domain;  SafeArrayUnaccessData(psa);
var.parray = psa;

    hr = pMs->Logon(var);

解决方案 »

  1.   

    哦,说错了,是IIMService接口的"logon"函数。
      

  2.   

    {
    ::CoInitialize(NULL); {
    HRESULT hr; MSIMCliSDKLib::IMSIMHost* pmh;
    MSIMCliSDKLib::IIMService* pMs;
    hr = ::CoCreateInstance(CLSID_MSIMHost,NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER, IID_IMSIMHost,(void**)&pmh); _variant_t vOpt(L"DEFAULT");
    hr = pmh->CreateContext(vOpt, VARIANT_FALSE, (IDispatch**)&pMs); SAFEARRAY* pSa = ::SafeArrayCreateVector(VT_BSTR, 0, 4);
    if (pSa == NULL)
    {
    //..
    } _variant_t var;
    var.vt = VT_BSTR | VT_ARRAY;
    var.parray = pSa; BSTR* pvData = NULL;
    HRESUTL hr = SafeArrayAccessData(psa, (void**)&pvData);
    pvData[0] = ::SysAllocString(L"[email protected]");
    pvData[1] = ::SysAllocString(L"ding");
    pvData[2] = ::SysAllocString(L"12345");
    pvData[3] = ::SysAllocString(L"fukuyama.dns.local");
    hr = SafeArrayUnaccessData(psa); hr = pMs->Logon(var); //...
    }
    ::CoUninitialize();
    }=========================================
    申明:没做过,所以没环境,你自己再试试吧。
    主要修改的地方是SAFEARRAY数组的处理。
      

  3.   

    靠!exchange服务器又出了问题,登录不上去了。先感谢楼上的兄弟。