我正在尝试使用GDI + Bitmap类将IStream转换为HBITMAP。使用来自Web服务的数据填充IStream对象。我正在读取部分数据并将其附加到稍后将使用Bitmap类的对象。
以下是代码的相关部分
char data1[] = "";
int offset = 0;
LPTSTR pszString = NULL;
LPSTREAM lpStream = NULL;
CreateStreamOnHGlobal(NULL, TRUE, &lpStream);
StreamStringCopy ((LPSTREAM)lpStream, (LPCTSTR)"");
while(of->pread(&data1,1023,offset) > 0){
LPCTSTR tempStr = data1;
StreamStringCat ((LPSTREAM)lpStream, tempStr);
offset = offset + strlen(data1);
}
Bitmap bm(lpStream,FALSE);
bm.GetHBITMAP(Color.Black, &ret);
StreamStringCat将字符串附加到LPSTREAM对象,这样我就可以得到一个LPSTREAM对象。
循环第一次运行正常。再次输入while循环时,& data1会发出Access违例异常。
有人可以告诉我应该如何解决这个问题。 感谢。
答案 0 :(得分:1)
首先,要小心字符串文字。像""
这样的字符串文字属于const char*
类型,因此您无法写入它们。我不完全确定你的构造char data1[] = ""
是否使它可写,但即使这样,你只有2个字符的内存,而你(我想)尝试读取{{1的位置1023个字节}}。试试这个:
data1
这会分配一些可以写入的内存。我想在第一次运行后,你已经覆盖了一些内存,导致下次运行时出现访问冲突。