18,356
社区成员
发帖
与我相关
我的任务
分享
void GetAlertSnapshot( char * snaphot,AlertDetail * alertDetail,int snapShotIndex)
{
//组装图片url
CString deviceAddr;
deviceAddr.Format("http://%s:%d",ip,port);
deviceAddr.Append(snaphot);
MSXML2::IXMLHTTPRequestPtr m_spXMLHTTPRequest;
m_spXMLHTTPRequest = NULL;
m_spXMLHTTPRequest.CreateInstance(L"Msxml2.XMLHTTP.4.0");
if (NULL != m_spXMLHTTPRequest)
{
m_spXMLHTTPRequest->open("GET", deviceAddr.AllocSysString(), VARIANT_FALSE,userName,passWord);
m_spXMLHTTPRequest->send();
//取得图片长度
_bstr_t responseHeader("Content-Length") ;
_bstr_t Contentlength =m_spXMLHTTPRequest->getResponseHeader(responseHeader);
//取得图片数据
_variant_t dataVar= m_spXMLHTTPRequest->GetresponseBody();
if (strncmp("TripwireEventSynopsis",alertDetail->eventType,strlen("TripwireEventSynopsis"))==0)
{
if ((LPCTSTR)Contentlength!=NULL)
{
int length = atoi(Contentlength);
alertDetail->snapshots.snapshots[snapShotIndex].snapshotData =dataVar;
alertDetail->snapshots.snapshots[snapShotIndex].snapshotSize=length;
}
else
{
COleSafeArray safearray;
LONG len;
//VARIANT型变量转换为ColeSafeArray型变量
safearray=dataVar;
//得到有效数据长度
len=safearray.GetOneDimSize();
if (0 == len)
{
::MessageBox(NULL,"图片长度为0","",0);
}
}
}
}
}
这是c++代码,这个有问题
public byte[] GetAlertSnapshot(string snapshotUrl )
{
try
{
string URI = getDeviceURI( this.txtDevice.Text);
URI += getResourceURL(snapshotUrl);
// setting parameters
HttpWebRequest request = WebRequest.Create(URI) as HttpWebRequest;
request.Method = "GET";
request.KeepAlive = true;
request.Timeout = ClsParams.HttpRespTimeOut;
System.Net.Cookie cookie = connCookie;
CookieContainer cookieCon = new CookieContainer();
cookieCon.Add(request.RequestUri, cookie);
request.CookieContainer = cookieCon;
// receive data
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
System.IO.Stream responseStream = response.GetResponseStream();
string contLenStr = response.Headers["Content-Length"].ToString();
int contLen = System.Convert.ToInt32(contLenStr);
byte[] data = new byte[contLen];
int recvLen = 0;
do
{
int wantToRead = contLen - recvLen;
recvLen += responseStream.Read(data, recvLen, wantToRead);
} while (recvLen > 0 && recvLen < contLen);
responseStream.Close();
if (recvLen > 0)
{
byte[] picData = new byte[recvLen];
Array.Copy(data, 0, picData, 0, recvLen);
return picData;
}
return null;
}
catch (Exception ex)
{
}
}
这是c#代码,这个没问题