Mandeep Singh Brar napisał: > I have a class A in module testD as follows > > module testD; > import std.stdio; > public class A { > public this() { > writeln("const"); > } > public void a(string l, int k) { > writeln("Hello B.a", l, k); > } > } > > I have another file which uses this class as follows: > > module user; > import std.stdio; > > int main() { > Object obj = Object.factory("testD.A"); > if(obj is null) > writeln("null object"); > else > writeln("object created"); > return 0; > } > > When i compile the class A as "dmd -c -of testD testD.d" and the second file > as "dmd user.d testD", > the example works fine and the object gets created. > > But When i compile the class A as "dmd -c -lib testD.d" and the second file > as "dmd user.d testD.a", > the example gives me a null object. > > The Object.factory method does not seem to work if my class has been compiled > as a static library. > Can you please let me know how to solve this. I have tried replacing public > with export for class > testD, but that does not help.
I think dmd creates type information for each compilation, but doesn't merge it when linking. I hope it's a bug and will also be fixed for dynamic libs. A (not nice) workaround may be exposing in your lib: Object objectFactory(string name) { return Object.factory(name); } and calling it in your program. This should look for the type name in your lib's info. BTW, am I the only one to think Object.factory is a bad name? It doesn't return a factory. Sure, one can get used to it, but why not Object.make or .create or .instance? -- Tomek