anatta18
asked on
Windows SDK: using CallWindowProc()
Hi;
I am a beginning programmer a few months out of school.
I have been trying to become a windows programmer and have been studying Charels Petzold's
"PROGRAMMING WINDOWS95"
I have had trouble compiling some of his sample code that requires the SDK function
CallWindowProc().
The compiler tells me that the datatype for the first argument is wrong. I checked the help
files and it isn't. Changing the data type hasn't helped.
I don't know about size restrictions on posts here so I am not posting the whole program.
I can if someone wants me to.
I am listing the error message, the declaration of the first argument, the initialization of the
first argument, and the function call:
/*
************************** ********** ********** ********** ***
** THE ERROR MESSAGE
************************** ********** ********** ********** ***
*/
C:\Program Files\DevStudio\MyProjects \W 25 Colors1\WinMain25.cpp(394) :
error C2664: 'CallWindowProcA' : cannot convert parameter 1 from
'long (__stdcall *)(void *,unsigned int,unsigned int,long)' to 'int (__stdcall *)(void)'
//Declaration of first argument
WNDPROC fnOldScr[3] ;
.
.
// Initialization Of First Argument
fnOldScr[i] = (WNDPROC) SetWindowLong( hwndScrol[i], GWL_WNDPROC, (LONG) ScrollProc);
// The function call
return CallWindowProc( fnOldScr[i], hwnd, iMsg, wParam, lParam) ;
I am a beginning programmer a few months out of school.
I have been trying to become a windows programmer and have been studying Charels Petzold's
"PROGRAMMING WINDOWS95"
I have had trouble compiling some of his sample code that requires the SDK function
CallWindowProc().
The compiler tells me that the datatype for the first argument is wrong. I checked the help
files and it isn't. Changing the data type hasn't helped.
I don't know about size restrictions on posts here so I am not posting the whole program.
I can if someone wants me to.
I am listing the error message, the declaration of the first argument, the initialization of the
first argument, and the function call:
/*
**************************
** THE ERROR MESSAGE
**************************
*/
C:\Program Files\DevStudio\MyProjects
error C2664: 'CallWindowProcA' : cannot convert parameter 1 from
'long (__stdcall *)(void *,unsigned int,unsigned int,long)' to 'int (__stdcall *)(void)'
//Declaration of first argument
WNDPROC fnOldScr[3] ;
.
.
// Initialization Of First Argument
fnOldScr[i] = (WNDPROC) SetWindowLong( hwndScrol[i], GWL_WNDPROC, (LONG) ScrollProc);
// The function call
return CallWindowProc( fnOldScr[i], hwnd, iMsg, wParam, lParam) ;
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Or make the first parameter a FARPROC instead of a WNDPROC if STRICT is defined.
ASKER
Someone else told me the opposite of the first answer and it worked.
( I fixed the problem by defining strict instead of undefining it ).
I mentioned in my question that I was a beginning programmer and a beginning
windows programmer. None of the answers really explained why I was having
a problem, why "strict" was involved, and how "strict" was involved.
This is fair enough. Even good educators in computer science have trouble breaking
the jargon barrier with less experienced folks in explaining things, but I didn't get
much background that I could use in any of the answers I got. Without background
in an answer my understanding can't improve. If my understanding can't improve
all I can do is to code what people tell me to.
I stop being a programmer and become someone who needs to hire a programmer
if I don't have the situation explained to me or am directed to a source that can
explain the situation.
( I fixed the problem by defining strict instead of undefining it ).
I mentioned in my question that I was a beginning programmer and a beginning
windows programmer. None of the answers really explained why I was having
a problem, why "strict" was involved, and how "strict" was involved.
This is fair enough. Even good educators in computer science have trouble breaking
the jargon barrier with less experienced folks in explaining things, but I didn't get
much background that I could use in any of the answers I got. Without background
in an answer my understanding can't improve. If my understanding can't improve
all I can do is to code what people tell me to.
I stop being a programmer and become someone who needs to hire a programmer
if I don't have the situation explained to me or am directed to a source that can
explain the situation.
STRICT is supposed to be defined when you want strict type checking. Here is an example from windows.h
#ifdef STRICT
typedef signed long LONG;
#else
#define LONG long
#endif
Does this help?
#ifdef STRICT
typedef signed long LONG;
#else
#define LONG long
#endif
Does this help?
That's why the error is with CallWndProcA when your code says CallWndProc