Passing opaque struct between functions/modules
    Sarath Kumar 
    sarath at invalid.com
       
    Wed Jan 23 08:33:06 PST 2013
    
    
  
DMD v2.61; openSUSE 12.1
Source:
-------
libA.d:
module libA;
extern (C)
{
         struct Opaque;
         Opaque* getObject();
         void doSomething(Opaque *);
}
----------
libB.d:
module libB;
extern (C)
{
         struct Opaque;
         void doAction(Opaque *);
}
-----------
bug.d
import libA, libB;
int main(string[] args)
{
         auto opaque = libA.getObject();
         libA.doSomething(opaque); // this is okay
         libB.doAction(opaque);  // but this is not, compiler 
error here
         return 0;
}
When I compile the above files, I get the below error.
$ rdmd bug.d
bug.d(7): Error: function libB.doAction (Opaque*) is not callable 
using argument types (Opaque*)
bug.d(7): Error: cannot implicitly convert expression (opaque) of 
type Opaque* to Opaque*
If I do an explicit cast, libB.Opaque*, for opaque in line 7, 
bug.d, I get completely different set of errors.
$ rdmd bug.d
libB.d(5): Error: struct libB.Opaque unknown size
libB.d(5): Error: struct libB.Opaque no size yet for forward 
reference
libB.d(5): Error: struct libB.Opaque unknown size
libB.d(5): Error: struct libB.Opaque no size yet for forward 
reference
libA.d(5): Error: struct libA.Opaque unknown size
libA.d(5): Error: struct libA.Opaque no size yet for forward 
reference
Can someone please tell me the right way to pass an opaque object 
between module's functions.
--
Thanks,
Sarath
    
    
More information about the Digitalmars-d-learn
mailing list