I am trying to convert an IStream to HBITMAP using the GDI+ Bitmap class. The IStream object is being populated by using data from a web service. I am reading the data in parts and appending it to an object to be used later with the Bitmap class.
Here is the relevant part of the code
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 appends the string to the LPSTREAM object so I can get a single LPSTREAM object.
The loop runs fine only the first time. When the while loop is entered again, the &data1 gives an Access violation exception.
Can someone please tell me how I should resolve this issue. Thanks.
First, be careful with string literals. String literals like
''are of typeconst char*, so you cannot write to them. I’m not entirely sure whether your constructchar data1[] = ''makes it writable, but even if so, you have only memory for 2 characters there, while you (I suppose) try to read 1023 bytes into the location ofdata1. Try this:This allocates some memory, which can be written to. I guess after the first run, you’ve overwritten some memory, which leads to the access violation in the next run.