December 20, 2004
Are class exports allowed in D?  I create the DLL and then pull the LIB using implib/system.  The C function "Testit()" works fine, but adding in a TestC class instantiation (with or without "Point." prepended) doesn't work.  I'm using the stock dll.d.

*****Point.d*****
export {

void Testit() { printf( "Hello\n");}

class TestC
{
this() {}
void Testit() { printf( "Class testit\n");}
int i;
}

}

*****dlltest.d*****
import Point;

void main(char [][]args)
{
Point.Testit();
TestC dllclass = new TestC();
}


December 20, 2004
If I remember right, due to some detail in how DLL's work, you have to provide a function to return either an instance of the Class or a delegate to a static factory method, or some such.  Aka, something like the following:

#
#  module mydll;
#
#  export MyClass delegate() MyClassFactory() {
#    return &(MyClass.factory);
#  }
#
#  public class MyClass {
#    public static MyClass factory() {
#      return new MyClass;
#    }
#  }
#

I know this has come up before, but since I don't personally usually use DLL's anyhow, I might not remember exaclty right.  Best to search the newsgroup.  Maybe once constructor delegates are available from ClassInfo references this will become simpler.  (Hint hint, Walter. :) )

-- Chris Sauls

Joe Meilinger wrote:
> Are class exports allowed in D?  I create the DLL and then pull the LIB using
> implib/system.  The C function "Testit()" works fine, but adding in a TestC
> class instantiation (with or without "Point." prepended) doesn't work.  I'm
> using the stock dll.d.