monkeydragon wrote:
how to would you transfer a DWORD variable from inside of a function to
the caller
ex.
InvokeProcessData(LPDWORD prtDW)
{
..
// we have created, initialized and processed
// dword variable from
DWORD data[32];
// we need to transfer DWORD data to caller
}
so that, the calling function would look like:
winmain(...)
{
DWORD new_data_buffer;
InvokeProcessData(&new_data_buffer);
//later 'new_data_buffer' will be used for example:
WriteFile(hFile, &new_data_buffer, ...,)
}
You can't return an array in C, so you have to use a pointer. Then
there are several ways.
You can make the function fill an array defined outside it directly.
Just define DWORD new_data_buffer[32], and call
InvokeProcessData(new_data_buffer). Then use prtDW inside the function,
instead of 'data'.
You can also have a static array inside of InvokeProcessData and just
return a pointer to it:
LPDWORD InvokeProcessData(void)
{
static DWORD data[32];
/* fill data with data */
/* this returns a pointer, NOT a copy of the array */
return data;
}
Everytime you call InvokeProcessData it will then overwrite the array,
so you need to copy it if you want to keep the previous version for use
outside the function. But you'd probably want the first method instead
of this.
I'm assuming that LPDWORD is just a DWORD *. And DWORD might be 32 bit
integer, not that it matters.
And you might want to use
#define PROCESS_DATA_SIZE 32
or something like that, instead of using the number directly. It
documents what the number is for, makes it easier to change it since you
only need to change it in one spot, and also makes it unlikely that you
type 23 somewhere instead of 32, etc.