global static pointer variable in DLL

Bill Baxter dnewsgroup at billbaxter.com
Sat May 17 14:21:43 PDT 2008


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


More information about the Digitalmars-d-learn mailing list