请高手指点一下。代码写在一个function里就可以,而分成两个就不行。

h7223 2004-04-14 12:19:51
向高手请教,代码写在一个function里就可以,而分成两个就不行。
代码如下:
1,static UInt8* pJpegBuff;//declare
//声明全局变量
2,pJpegBuff=(UInt8*)MemPtrNew(MAX_JPEG_SIZE);//alloc memory
//获取内存

3,static void ProcRevDatas()
{
UInt8 buffer[1024];
UInt16 bufferLen=sizeof(buffer);
UInt16 curAddrLen=sizeof(curAddr);
char msg[64];

UInt16 i;
UInt16 iPos=633;

ReceiveUDP(svrSocket, &curAddr,&curAddrLen,
(UInt8*)buffer, &bufferLen);
IntegrateJpg(buffer,iRevLength);
//写在这里就可以拷贝数据给pJpegBuff,
//将buffer传给IntegrateJpg()就不能访问buffer的数据。
//for(i=0;i<bufferLen - 12;i++)//PIC_DATA_HEADER=12
// pJpegBuff[i+iPos]=buffer[i+12];
//StrPrintF(msg," %s ","IntegrateJpg OK!!");
//WinDrawChars (msg, StrLen(msg), 0, 100);
}
4,static void IntegrateJpg(UInt8 *PicData, UInt16 iRevLength)
{
UInt16 i;
UInt16 iPos=633;
char msg[64];
for(i=0;i<iRevLength - 12;i++)//PIC_DATA_HEADER=12
pJpegBuff[i+iPos]=PicData[i+12];
//被ProcRevDatas() call 时这里会报内存不可访问PicData错误,请高手指点一下。
StrPrintF(msg," %s ","IntegrateJpg OK!!");
WinDrawChars (msg, StrLen(msg), 0, 100);
}
...全文
93 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bear1977 2004-04-20
  • 打赏
  • 举报
回复
http://www.msale.net/Forum/viewtopic.php?t=2716
lczgn 2004-04-20
  • 打赏
  • 举报
回复
buf里的数据是什么,是0x1,0x2,0x3,0x4,0x5,0x6吗?
h7223 2004-04-20
  • 打赏
  • 举报
回复
谢谢sbnth和lczgn两位高手!

问题还是不知道是啥原因,也不管了,
我在写的程序是通过udp来浏览实时图象数据,数据为jpeg格式需要解压缩为bmp格式,
正为jpeg解压缩苦闷,我改用文件api来缓冲数据,新问题却又出现了,
只是写几个字节然后读几个字节就不对了,请两位高手帮忙看看,代码如下:

FileHand fh;
Err error=0;
char msg[64];
UInt8 tt[8] ={1,2,3,4,5,6,7,8};
UInt8 buf[32];

fh = FileOpen(0, MyTempFileName, 0, 0, fileModeReadWrite, &error);//|fileModeTemporary
if (error != fileErrOpenError){
FileSeek(fh,0,fileOriginBeginning);
FileWrite(fh,tt,sizeof(UInt8),sizeof(tt),&error);
FileClose(fh);
}

fh = FileOpen(0, MyTempFileName, 0, 0, fileModeReadWrite, &error);
if (error != fileErrOpenError){
FileSeek(fh,0,fileOriginBeginning);
FileRead(fh,buf,sizeof(UInt8),sizeof(tt),&error);
FileClose(fh);
StrPrintF(msg,"buf %d %d %d %d %d %d",buf[0],buf[1],buf[2],buf[3],buf[4],buf[5]);
WinDrawChars (msg, StrLen(msg), 0, 80);
}
bear1977 2004-04-20
  • 打赏
  • 举报
回复
u r welcome, i am sorry i can't help u more...
h7223 2004-04-20
  • 打赏
  • 举报
回复
回lczgn,
buf里的数据根本就不是什么1,2,3,4,5,6,
iWritedBytes=FileWrite(fh,tt,sizeof(UInt8),sizeof(tt),&error);
这里写的字节数iWritedBytes居然是0,
iReadedBytes=FileRead(fh,buf,sizeof(UInt8),sizeof(tt),&error);
这里读的字节数iReadedBytes居然还是0,??怎么搞的~0~

谢谢bear1977的连接!
jcpalm 1.1很不错,可我没法组织jpeg数据又如何解压缩显示图象啊,
郁闷,可我还是爱plam!!


lczgn 2004-04-19
  • 打赏
  • 举报
回复
把static UInt8* pJpegBuff;//declare这句的static去掉试试
h7223 2004-04-14
  • 打赏
  • 举报
回复
谢谢胖哥,
请看是这样的
buffer传到IntegrateJpg里面去就不可访问了,为什么呢?
xulubo123 2004-04-14
  • 打赏
  • 举报
回复
可能是16bit的问题,编译碰到这种问题时,需要手动调整代码
sbnth 2004-04-14
  • 打赏
  • 举报
回复
MAX_JPEG_SIZE为多大?
h7223 2004-04-14
  • 打赏
  • 举报
回复
谢谢sbnth和胖哥!
iRevLength的值为992不大,buffer[1024]该为动态也不行。
请看具体的代码,这个问题很奇怪已经折腾n 多时间了,
请二位前辈指点一二:
1,static UInt8* pJpegBuff;//declare
//声明全局变量
2,pJpegBuff=(UInt8*)MemPtrNew(MAX_JPEG_SIZE);//alloc memory
//获取内存
if(!pJpegBuff){//分配失败
StrPrintF(msg,"%s","MemPtrNew fail");
WinDrawChars (msg, StrLen(msg), 0, 80);
return;
}
3,static void ProcRevDatas()
{
UInt8 buffer[1024];
UInt16 bufferLen=sizeof(buffer);
UInt16 curAddrLen=sizeof(curAddr);
char msg[64];

UInt16 i;
UInt16 iPos=633;

ReceiveUDP(svrSocket, &curAddr,&curAddrLen,
(UInt8*)buffer, &bufferLen);
IntegrateJpg(buffer,iRevLength);
//写在这里就可以拷贝数据给pJpegBuff,
//将buffer传给IntegrateJpg()就不能拷贝数据了。
//for(i=0;i<bufferLen - 12;i++)//PIC_DATA_HEADER=12
// pJpegBuff[i+iPos]=buffer[i+12];
//StrPrintF(msg," %s ","IntegrateJpg OK!!");
//WinDrawChars (msg, StrLen(msg), 0, 100);
}
4,static void IntegrateJpg(UInt8 *PicData, UInt16 iRevLength)
{
UInt16 i;
UInt16 iPos=633;
char msg[64];
for(i=0;i<iRevLength - 12;i++)//PIC_DATA_HEADER=12
pJpegBuff[i+iPos]=PicData[i+12];
//被ProcRevDatas() call 时这里会报内存不可访问错误,请高手指点一下。
StrPrintF(msg," %s ","IntegrateJpg OK!!");
WinDrawChars (msg, StrLen(msg), 0, 100);
}
sbnth 2004-04-14
  • 打赏
  • 举报
回复
可能是堆栈溢出了,你把buffer[1024]改成动态分配试试。
xulubo123 2004-04-14
  • 打赏
  • 举报
回复
会不会是iRevLength的值太大了?或者是pJpegBuff的问题?

3,119

社区成员

发帖
与我相关
我的任务
社区描述
塞班系统(Symbian系统)是塞班公司为手机而设计的操作系统,它的前身是英国宝意昂公司的 EP ( Electronic Piece of cheese)操作系统。
社区管理员
  • Symbian社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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