the GCC (3.2.2) compiler will not let me declare an __stdcall__ pointer to function member and code will than SEGFAULT on invocation of the member pointer. This is not the case for Regular pointers to functions. ( The compiler will also issue a warning on mismatch.)
Listing of the Error: (BAD)
class AFoo { public: __attribute__((__stdcall__)) void foo(int i ,int ii ,int iii) ; } ;
__attribute__((__stdcall__)) void AFoo::foo(int i ,int ii ,int iii) { return ; }
int main() { AFoo afoo ; void ( AFoo::*func)(int,int,int) ; func = &AFoo::foo ;
for(int i=0 ; i < 0x8000000 ;i++) (afoo.*func)(1,2,3) ; // SEGFAULT or SEGIL when stack is Exhausted return 0 ; }
any attempt to place the __atribute__((stdcall)) in the pointer declaration causes a compilation error. With out it the code will SEGFAULT.
If declaring a regular pointer to function than no compilation error is issued and all is well.
Listing of Regular function pointer: (GOOD)
void __attribute__((stdcall)) foo(int i ,int ii ,int iii) { }
int main() { void ( __attribute__((stdcall)) *func)(int,int,int) = &foo ;
for(int i=0 ; i < 0x8000000 ;i++) (func)(1,2,3) ;
return 0 ; }
removing the __attribute__((stdcall)) from the *func declaration will rightfully issue a warning ( should be an error if you ask me, type mismatch). But Not so on our first example.
!!!!!!!!!!!!!!!!!! Please if any body can help me? This totaly breaks COM. Is there a GCC switch to have all members (and pointers)__stdcall, to by pass this problem?
Free Life Boaz