这是一个基于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()也是一个unsigned char *。
我该怎么做?
谢谢!
答案 0 :(得分:0)
您可以使用以下语法之一:
unsigned char* SeparateStuff(); //Returns a pointer
void SeparateStuff(unsigned char** ppBuffer); //Pointer to the output buffer
或者在C ++中:
void SeparateStuff(unsigned char*& pBuffer) //Reference to the output buffer
答案 1 :(得分:0)
SeparateStuff(&ReturnedBytes);
void SeparateStuff(unsigned char** ReturnedBytes)
{
...
}
答案 2 :(得分:0)
试试这个:
void SeparateStuff(unsigned char **handleToBuffer)
{
...
if (*handleToBuffer = (unsigned char *) GlobalLock(hMem))
{
...
}
else
{
return;
}
...
}
请确保所有参数都已正确初始化。此外,您必须保证GlobalLock返回的内容仍然存在。