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