extern and opaque structs
    Jonathan M Davis 
    jmdavisProg at gmx.com
       
    Wed May  2 22:22:22 PDT 2012
    
    
  
On Thursday, May 03, 2012 07:00:21 James Miller wrote:
> I'm doing C bindings and I have an opaque struct and an extern'd
> variable of the type of that struct. The problem is that dmd is
> complaining that the struct has no definition (which is true).
> Making it a pointer works (expected) but i can't do that because
> the interface is expecting an full struct.
> 
> Adding __gshared doesn't help.
> 
> I assume this is bug, since usage of extern means that I don't
> need to know the size, since it will be allocated in the C code,
> not the D code.
If you're putting the struct on the stack, then you need the struct's 
definition. That's true in C/C++ as well as in D. You can get away without 
having the definitions to its _functions_, but you need the definition for the 
struct itself. The only time that you escape this is via pointers.
And I don't know how you can talk about the struct as being allocated in the C 
code if it's on the stack, except perhaps if it has pointers as member 
variables, in which case it's the memory for those member variables which is 
allocated in the C code. The entire struct is copied every time that it's 
passed to anything - unless you're using pointers, which you say you aren't.
- Jonathan M Davis
    
    
More information about the Digitalmars-d-learn
mailing list