export classes from DLLs
John C
johnch_atms at hotmail.com
Mon May 8 07:16:02 PDT 2006
Anyone ever got classes to export from DLLs correctly? I've searched the
forum and it seems each effort has only got so far.
Using a factory method in the DLL works, but that's not what I'm trying
to accomplish. If I try to create an instance in a program using the
DLL, the compiler complains about an undefined symbol.
mydll.d implementation module
# // DllMain/gc_init etc omitted for brevity
#
# export class Dog {
# export static Dog create() {
# return new Dog;
# }
# char[] bark() {
# return "Woof";
# }
# }
mydll.di import module
# class Dog {
# static Dog create();
# char[] bark();
# }
mydll.def
# LIBRARY "mydll.dll"
# EXETYPE NT
# EXPORTS
Compile DLL and create import library
> dmd mydll mydll.def
> implib /system mydll.lib mydll.dll
program.d
# import mydll;
# void main() {
# // Dog dog = Dog.create(); // This works
# Dog dog = new Dog; // This doesn't
# dog.bark();
# }
Compile program
> dmd program mydll.lib
This produces the following error:
> program.obj
> Error 42: Symbol undefined __Class_7program3Dog
Adding __Class_7program3Dog to the EXPORTS list kills the error, but
then the program throws an access violation.
When I compile classes into a static library (no DLL), this problem
doesn't surface.
More information about the Digitalmars-d-learn
mailing list