0

我正在尝试使用 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 给出访问冲突异常。

有人可以告诉我应该如何解决这个问题。谢谢。

4

1 回答 1

1

首先,要小心字符串文字。像这样的字符串文字""是 type const char*,所以你不能写它们。我不完全确定您的构造是否char data1[] = ""使其可写,但即使是这样,您那里也只有 2 个字符的内存,而您(我想)尝试将 1023 个字节读入data1. 试试这个:

char* data1 = static_cast<char*> (std::malloc (1024 * sizeof (char));

...

std::free (data1);

// or try this
char data1 [1024] = { 0 }; // Gives you 1024 bytes to write to on the stack

这会分配一些内存,可以写入。我猜在第一次运行之后,您已经覆盖了一些内存,这会导致下一次运行时出现访问冲突。

于 2009-02-07T09:29:48.787 回答