【发布时间】:2009-06-15 13:16:38
【问题描述】:
这是一个基于 Win32 的 C 代码的问题。 在我的一个函数中,我有以下代码:
void SeparateStuff()
{
HGLOBAL hMem;
IStream* pStream;
Status result;
unsigned char* pBytes;
DWORD size;
FILE* fp;
if (hMem = GlobalAlloc(GMEM_MOVEABLE, 0))
{
if (CreateStreamOnHGlobal(hMem, FALSE, &pStream) == S_OK)
{
// save the buffer to a file
result = Scramble(pStream);
pStream->Release();
if (result == Ok)
{
if (pBytes = (unsigned char *) GlobalLock(hMem))
{
size = GlobalSize(hMem);
// pBytes has the buffer now
// in this case write it to a file
if(fp = fopen("c:\\SomeFile.bin", "wb"))
{
fwrite(pBytes, size, 1, fp);
fclose(fp);
}
}
}
}
else
{
printf("error CreateStreamOnHGlobal. Last err: %d\n", GetLastError());
return;
}
}
else
{
printf("error GlobalAlloc. Last err: %d\n", GetLastError());
return;
}
}
在这种情况下,将 unsigned char* 缓冲区保存到文件中。一切安好。 现在,我需要修改此代码,以便返回 unsigned char*。比如:
void SeparateStuff(unsigned char* ReturnedBytes)
在函数内部将修改 ReturnedBytes 的位置。 我尝试复制指针,我尝试复制指针内的数据。我尝试了很多不同的方法。不管我做什么,我都会在调用函数中得到垃圾或异常。 调用函数(例如 main())还必须传递给SeparateStuff() 一个无符号字符*。
我该怎么做?
谢谢!
【问题讨论】:
-
请为您使用的任何语言添加标签。我无法告诉你有多少次人们添加了非常好的标签,但是却忽略了一些非常明显的东西,比如 c 或 .net。