www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - exporting classes DLL

reply Joe Meilinger <Joe_member pathlink.com> writes:
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();
}
Dec 20 2004
parent Chris Sauls <ibisbasenji gmail.com> writes:
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.

Dec 20 2004