我在作一个自动向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、用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);
::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数组的处理。