You receive a C2564 error or a C2197 error when you port code that uses GetProcAddress from C to C++ This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.
This article was previously published under Q117428 SUMMARY
When porting code that uses GetProcAddress() from C to C++, the C++
compiler for MS-DOS can return the following error message:
error C2564: formal/actual parameters mismatch in call through
pointer to function
The error message that is returned with the 32-bit compiler is:
error C2197: 'int (__stdcall *)(void )' : too many actual parameters
MORE INFORMATION
In a traditional C application, use GetProcAddress() to obtain the
address of a function to be called. Declare a variable of type
FARPROC, initialize the pointer with the value returned from
GetProcAddress(), and then call the function through a pointer
as shown:
When not compiling with STRICT, FARPROC is defined in the WINDOWS.H
file as follows:
When the sample code above is converted to C++, a type-mismatch error
occurs because C and C++ have a fundamental difference in the way they
interpret empty parentheses in function declarations. In C, a function
declared as follows:
declares a function that accepts an unknown number of arguments. In
C++, the same declaration represents a function that accepts no
arguments. In other words, in C++, the statement is equivalent to:
Because of this difference, when a pointer of type FARPROC is used to
call a function with parameters in C, no error occurs. In C++, when
the function being passed to GetProcAddress() has parameters, the
formal/actual-parameter-mismatch error occurs because the function of
type FARPROC is defined as a function that has void parameters rather
than as a function that accepts parameters.
To eliminate the error, define the function pointer as a pointer to a function with the correct number of parameters and then typecast the return value from GetProcAddress() to the appropriate type: APPLIES TO
| Article Translations
|


Back to the top
