Stange Exceptions with Delegates

Trevor Parscal trevorparscal at hotmail.com
Sat Jan 12 01:10:20 PST 2008


torhu Wrote:

> Trevor Parscal wrote:
> > Im experiencing a very strange behavior with delegates. When using some OpenGL functions in a delegate my program will give me
> > 
> > object.Exception: Access Violation
> > - when there's a Cout call at the begining and end of the delegate
> > 
> > object.Exception: Win32 Exception
> > - when it's only OpenGL calls in the delegate
> > 
> > The strangest part is that the Cout calls will succeed in printing to the console, meaning the access violation isn't in the OpenGL calls. I also placed some Cout calls before and after the actual calling of the delegate, and the first prints, while the second (post delegate calling) never does.
> > 
> > So what could be happening between the last call inside of a delegate and the delegate being done?
> 
> Are you on windows?  A typical mistake is calling openGL functions using 
> the cdecl calling convention, you need to use stdcall.  stdcall is 
> 'extern (Windows)' or 'extern (System)' in D.  Mixing up calling 
> conventions leads to stack corruption, and then usually a crash sooner 
> or later after the function returns.

Excelent advice, and after looking at other opengl bindings you are absolutely right... However.

I am using implib to generate a .lib from my opengl32.dll on my system - and the only way I can get a compile without linking errors is to use extern(C)

I have tried using the /s flag and not - no difference in behavior. Any ideas of what I could do to fix this?



More information about the Digitalmars-d mailing list