各位高手请指点一下,控件事件传出图片的问题

huazaimh 2009-12-31 09:00:54
现在有一个控件,我想通过事件把图片作为参数传出去,可是不管如何实验,都有问题
事件的原型,void OutBayEvent(BSTR Pic, long lPicLen, BSTR szEventInfo);
不管我如何来传,感觉数据是传出去了,可是在处理的时候,收到的数据老是不对
我在应用程序写文件的时候,里面的数据不对,写的文件也不能显示
请各位高手,指点一下,急!急!急!
另外:分不够可以另开贴给分,只要能解决问题!
...全文
83 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
huazaimh 2009-12-31
  • 打赏
  • 举报
回复
在控件中,没有图片类型,不知道是不是我选的数据类型有问题
因为涉及到转换
这个是控件外的调用程序里面的代码:
void CTestRVDlg::OnTEventCamrvctrl1(BSTR FAR* Pic, long lPicLength)
{
CString strPic(*Pic);
BYTE *p = new BYTE[lPicLength];
memcpy(p,strPic.GetBuffer(0),strPic.GetLength());
CFile PicFile;
if(PicFile.Open("Test.jpg",CFile::modeCreate|CFile::modeWrite))
{
PicFile.Write(p,lPicLength);
PicFile.Close();
}
}

void CTestRVDlg::OnButton1()
{
m_ctrlRV.AddDev("");

}

void CTestRVDlg::OnOutBayEventCamrvctrl1(LPCTSTR Pic, long lPicLen, LPCTSTR szEventInfo)
{
char *str = new char[lPicLen];
wsprintfA(str, "%S ",Pic);
CFile PicFile;
if(PicFile.Open("TestX.jpg",CFile::modeCreate|CFile::modeWrite))
{
PicFile.Write(str,lPicLen);
PicFile.Close();
}

}
下面这一段是控件里面的代码(传出部分):
char tmpbuf[200];
sprintf(tmpbuf,"%s",szCameraIP);
adddev(inet_addr(tmpbuf),512,680,150);//可以增加多个IP地址
ResetDll(this->m_hWnd);

CFile PictureFile;
CFileException e;
if(PictureFile.Open("ITS31.jpg",CFile::modeRead|CFile::typeBinary,&e))
{
long lPicLen = PictureFile.GetLength();
char *Pic = new char[lPicLen];
memset(Pic,0,lPicLen);
if(PictureFile.Read(Pic,lPicLen)<=0)
AfxMessageBox("Read Pic File ERR!");

FireOutBayEvent(LPCTSTR(Pic),lPicLen,"图片文件");
// CComBSTR str(Pic);
BSTR bstrTmp;

//char str[]="ABCDE";

bstrTmp = _com_util::ConvertStringToBSTR(Pic);

FireTEvent(&bstrTmp,lPicLen);

delete Pic;
}

实际中的应用不是这样的,这个是我为了测试来做一个事件,请各位指点一下!谢谢!
oyljerry 2009-12-31
  • 打赏
  • 举报
回复
FireOutBayEvent的Pic中存放图片地址,传递过去
huazaimh 2009-12-31
  • 打赏
  • 举报
回复
可是事件中,没有一个void类型
事件的原型啊,
void FireOutBayEvent(LPCTSTR Pic, long lPicLen, LPCTSTR szEventInfo)
{FireEvent(eventidOutBayEvent,EVENT_PARAM(VTS_BSTR VTS_I4 VTS_BSTR), Pic, lPicLen, szEventInfo);}
我的QQ:44190484,请各位高手指导一下,谢谢!
yxwsbobo 2009-12-31
  • 打赏
  • 举报
回复
最简单弄全局变量。。


OutBayEvent是什么函数的原型? 相应事件的原型好像不是这样


可以只传一个VOID 类型的地址,然后在这个地址中转换为存放图片的地址,WINDOWS自己很多也是这样做的
oyljerry 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 huazaimh 的回复:]
已经解决,用VARIANT类型
void OutBayEvent(VARIANT varPic, long lPicLen, BSTR szBayInfo);
具体的实现如下:
VARIANT varPic;
varPic.pbVal = new BYTE[pinfo.piclen];
memset(varPic.pbVal,0,pinfo.piclen);
memcpy(varPic.pbVal,pinfo.pic,pinfo.piclen);

FireOutBayEvent(varPic,pinfo.piclen,strMsg);

[/Quote]
varPic.pbVal = new BYTE[pinfo.piclen];
记得用完了,delete释放
huazaimh 2009-12-31
  • 打赏
  • 举报
回复
已经解决,用VARIANT类型
void OutBayEvent(VARIANT varPic, long lPicLen, BSTR szBayInfo);
具体的实现如下:
VARIANT varPic;
varPic.pbVal = new BYTE[pinfo.piclen];
memset(varPic.pbVal,0,pinfo.piclen);
memcpy(varPic.pbVal,pinfo.pic,pinfo.piclen);

FireOutBayEvent(varPic,pinfo.piclen,strMsg);

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧