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.