digitalmars.D.learn - Re: global static pointer variable in DLL
- Zarathustra <adam.chrapkowski gmail.com> May 25 2008
- torhu <no spam.invalid> May 25 2008
- Zarathustra <adam.chrapkowski gmail.com> May 25 2008
- "Koroskin Denis" <2korden gmail.com> May 25 2008
- 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
Zarathustra wrote: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.
Does it crash on the malloc line? Maybe you've got heap corruption. You could check for stray pointers or buffer overflows. Maybe someone else recognizes this error and can tell you more, because I might be completely wrong about this.
May 25 2008
torhu Wrote:Zarathustra wrote: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.
Does it crash on the malloc line? Maybe you've got heap corruption. You could check for stray pointers or buffer overflows. Maybe someone else recognizes this error and can tell you more, because I might be completely wrong about this.
Ok I resolved this problem by change std.c.stdlib.malloc on std.gc.malloc. But now I still have a problem with fprintf() functions. code: ________________________________________________________ offs = fprintf(gl2ps.stream, "1 0 obj\n<<\n/Title (%s)\n/Creator (GL2PS %d.%d.%d%s, %s)\n/Producer (%s)\n", gl2ps.title, GL2PS_MAJOR_VERSION, GL2PS_MINOR_VERSION, GL2PS_PATCH_VERSION, GL2PS_EXTRA_VERSION, GL2PS_COPYRIGHT, gl2ps.producer); ________________________________________________________ Unhandled Exception: EXCEPTION_ACCESS_VIOLATION(0xc0000005) at _strlen (0x0042a37d) thread(3380) but when I change it: code ________________________________________________________ offs = fprintf(gl2ps.stream, /*"1 0 obj\n<<\n/Title (%s)\n/Creator (GL2PS %d.%d.%d%s, %s)\n/Producer (%s)\n",*/ gl2ps.title, GL2PS_MAJOR_VERSION, GL2PS_MINOR_VERSION, GL2PS_PATCH_VERSION, GL2PS_EXTRA_VERSION, GL2PS_COPYRIGHT, gl2ps.producer); ________________________________________________________ everything is ok :/, too long string or what?
May 25 2008
On Sun, 25 May 2008 22:57:35 +0400, Zarathustra = <adam.chrapkowski gmail.com> wrote:Ok I resolved this problem by change std.c.stdlib.malloc on =
std.gc.malloc. But now I still have a problem with fprintf() functions. code: ________________________________________________________ offs =3D fprintf(gl2ps.stream, "1 0 obj\n<<\n/Title (%s)\n/Creator (GL2PS %d.%d.%d%s=
%s)\n/Producer (%s)\n", gl2ps.title, GL2PS_MAJOR_VERSION, GL2PS_MINOR_VERSION=
GL2PS_PATCH_VERSION, GL2PS_EXTRA_VERSION, =
GL2PS_COPYRIGHT, gl2ps.producer); ________________________________________________________ Unhandled Exception: EXCEPTION_ACCESS_VIOLATION(0xc0000005) at _strlen=
(0x0042a37d) thread(3380) but when I change it: code ________________________________________________________ offs =3D fprintf(gl2ps.stream, /*"1 0 obj\n<<\n/Title (%s)\n/Creator (GL2PS =
%d.%d.%d%s, %s)\n/Producer (%s)\n",*/ gl2ps.title, GL2PS_MAJOR_VERSION, GL2PS_MINOR_VERSION=
GL2PS_PATCH_VERSION, GL2PS_EXTRA_VERSION, =
GL2PS_COPYRIGHT, gl2ps.producer); ________________________________________________________ everything is ok :/, too long string or what?
Looks like you provide a null-pointer as a string to fprintf...
May 25 2008
Koroskin Denis Wrote:On Sun, 25 May 2008 22:57:35 +0400, Zarathustra <adam.chrapkowski gmail.com> wrote:Ok I resolved this problem by change std.c.stdlib.malloc on std.gc.malloc. But now I still have a problem with fprintf() functions. code: ________________________________________________________ offs = fprintf(gl2ps.stream, "1 0 obj\n<<\n/Title (%s)\n/Creator (GL2PS %d.%d.%d%s, %s)\n/Producer (%s)\n", gl2ps.title, GL2PS_MAJOR_VERSION, GL2PS_MINOR_VERSION, GL2PS_PATCH_VERSION, GL2PS_EXTRA_VERSION, GL2PS_COPYRIGHT, gl2ps.producer); ________________________________________________________ Unhandled Exception: EXCEPTION_ACCESS_VIOLATION(0xc0000005) at _strlen (0x0042a37d) thread(3380) but when I change it: code ________________________________________________________ offs = fprintf(gl2ps.stream, /*"1 0 obj\n<<\n/Title (%s)\n/Creator (GL2PS %d.%d.%d%s, %s)\n/Producer (%s)\n",*/ gl2ps.title, GL2PS_MAJOR_VERSION, GL2PS_MINOR_VERSION, GL2PS_PATCH_VERSION, GL2PS_EXTRA_VERSION, GL2PS_COPYRIGHT, gl2ps.producer); ________________________________________________________ everything is ok :/, too long string or what?
Looks like you provide a null-pointer as a string to fprintf...
Why Do you think that? When I shorten string then error don't occur. There didn't occur null pointers, I checked It before. I think that interesting is the error "_strlen". Also interesting is that, why when I execute this code with C then everything is ok. How to check what does this error exactly mean? It looks like rate of data is too big for one fprintf() call.
May 25 2008