__stdcall__ pointer to member function

Boaz Harrosh boaz at hishome.net
Tue Aug 12 06:25:35 CDT 2003


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





More information about the wine-devel mailing list