global static pointer variable in DLL

Bill Baxter dnewsgroup at
Sun May 18 15:22:51 PDT 2008

Zarathustra wrote:
> Bill Baxter Wrote:
>> Zarathustra wrote:
>>> torhu Wrote:
>>>> Zarathustra wrote:
>>>>> I have a C DLL whih global static pointer variables.
>>>>> When I use this DLL with C everything is ok, but when I try to use it (DLL) with D I receive Acces Violation errors.
>>>>> I do not have any idea what is wrong. If something is inexplicable, You will ask. Please help.
>>>>> simple example code in dll
>>>>> gl2ps is global pointer
>>>>> [code]
>>>>> if(gl2ps){/* 
>>>>> never true in C but true in D*/}
>>>>> [/code]
>>>> It's a bit hard to know what the problem is when you don't post some 
>>>> more code.  How do you declare gl2ps in D?  If it's in a C DLL, it 
>>>> should look like this:
>>>> export extern extern (C) void* gl2ps;
>>>> Replace void* with the correct type, of course.
>>>> And in the C code IIRC it should be:
>>>> __declspec(dllexport) void* gl2ps;
>>> gl2ps is not exported because it is not necessary beyond DLL.
>>> gl2ps declaration in DLL is following:
>>> static GL2PScontext *gl2ps = NULL;
>>> for example:
>>> The crash occurs in exported gl2psBeginPage function. (in attachment)
>>> Declaration of above function in D is following:
>>> extern (C) GLint gl2psBeginPage;	// static linking
>>> DLL is little long but very simple, so I can send it to you.
>> You might be interested in my Frankenstein's hybrid of gl2ps and OGLE. 
>> It allows basically allows you to do what gl2ps does, but 
>> non-invasively.  I.e. you can gl2ps an OpenGL screen without modifying 
>> any source code.
>> --bb
> It sounds good.
> Could You tell something more about your Frankenstein's hybrid? Where can i find more information about it?

Just something I whipped up because I needed it.  There's no docs or 
anything at this point (though OGLE, which it is based on can be found 

Put the OpenGL32.dll from in this zip into your program's exe dir

And copy a gliconfig.ini from in there to your exe dir too.  Read the 
gliconfig.ini for some info.  I think by default Ctrl-Shift-F12 is the 
screen-grab-to-svg keystroke.  You can change the settings in 
gliConfig.ini to save to PS if you prefer.


More information about the Digitalmars-d-learn mailing list