Question

I have a C++ console application & a DLL. In the C++ application I see the following snippet ::

typedef DWORD (WINAPI* functABC)(unsigned long*);

functABC functABC111;
HMODULE handleDLL = LOadLibrary("a.DLL");
functABC111 = (functABC)GetProcAddress(handleDLL,"function_1");

At a high level I understand that we are getting the function pointer to the function in a.DLL "function_1()".

But want to understand the 1st 2 lines in the above snippet ::

typedef DWORD (WINAPI* functABC)(unsigned long*);
functABC functABC111;

2 questions :: 1) Is the name "functABC" just a random function pointer name?
2) What are we technically doing in these 2 lines. Declaring function pointer.
3) Why do we need to use WINAPI* in the function pointer declaration in 1st line.

THanks in advance.

Was it helpful?

Solution

  1. 'functABC' is a typedef to a function returning a DWORD taking an unsigned long pointer as a parameter

  2. First lines defines a typedef and second one creates a function pointer using it

  3. 'WINAPI' is a macro that's usually expanded to '__stdcall' which is the calling convention used by Microsoft to export functions from a .DLL

OTHER TIPS

3) Almost all Windows functions (from shell32.dll, user32.dll, and all other) are declared as __stdcall, or as WINAPI (same thing). It is not necessary to declare functions in DLL as WINAPI, but people just follow Microsoft's lead. The code will be a few bytes smaller, and execution a few nanoseconds shorter.

2) What are we technically doing in these 2 lines. Declaring function pointer.

First a type is defined that can be used to point to any function that follows the prototype DWORD WINAPI funcName(unsigned long*);. Then a variable of that type is created.

3) Why do we need to use WINAPI* in the function pointer declaration in 1st line.

Because function_1 is using the WINAPI calling convention (usually defined as __stdcall). Or at least this code assumes that it does.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top