digitalmars.D.learn - Re: global static pointer variable in DLL
- Zarathustra <adam.chrapkowski gmail.com> May 25 2008
torhu Wrote:Zarathustra wrote:Oh, I find out something. The most crashes occur in similar calls (in DLL) like following: ________________________________________________________ offs += fprintf(gl2ps->stream, "%%PDF-1.4\n"); ________________________________________________________ it looks like DLL haven't got access to FILE(gl2ps->stream), but why? The FILE is operand of gl2psBeginPage. Call of gl2psBeginPage function in my D code is in following function: ________________________________________________________ extern (C) void SaveFile(){ FILE* fp; int state = GL2PS_OVERFLOW; int buffsize = 0; try{ fp = fopen("out.pdf", "wb"); while(state == GL2PS_OVERFLOW){ buffsize += 1024*1024; gl2psBeginPage( "test", "gl2psTestSimple", null, GL2PS_PDF, GL2PS_SIMPLE_SORT, GL2PS_DRAW_BACKGROUND | GL2PS_USE_CURRENT_VIEWPORT, GL_RGBA, 0, null, 0, 0, 0, buffsize, fp, "out.pdf" ); RenderFrame(); state = gl2psEndPage(); } fclose(fp); MessageBoxA(null, "File saved", "Information", MB_OK | MB_ICONINFORMATION); } catch(Object o){ MessageBoxA(null, cast(char*)o.toString(), "Critical Error", MB_OK | MB_ICONERROR); } } ________________________________________________________ exactly: gl2ps->stream = fp;
Have you tried debugging this code with ddbg, and checked what the actual values of gl2ps and gl2ps->stream are when it crashes? http://ddbg.mainia.de/
I converted all gl2ps code to d and then started debugging with ddbg. I have got a problem with allocating memory. I have got the following code: if(gl2ps.bgcolor is cast(GL2PSrgba*)null){ gl2ps.bgcolor = cast(GL2PSrgba*)malloc(GL2PSrgba.sizeof); } and error: Unhandled Exception: EXCEPTION_ACCESS_VIOLATION(0xc0000005) at ?Alloc RTLPool QAEPAXXZ (0x0042e8a9) thread(5368) I don't know what does it mean.
May 25 2008