May 13, 2010
Nrgyzer Wrote:

> torhu Wrote:
> 
> > On 06.05.2010 16:06, Nrgyzer wrote:
> > > Thanks, but doesn't work :(
> > >
> > > My files contain:
> > >
> > > mydll.d:
> > >
> > > module mydll;
> > > export extern int i;
> > >
> > > mydll2.d:
> > >
> > > module mydll;
> > > export int i = 7;
> > >
> > > test.d:
> > >
> > > import mydll;
> > > import std.stdio;
> > >
> > > void main() {
> > > 	writefln(i);
> > > }
> > >
> > > I can compile the dll, but when I compile test.d, I get the following error: "Error 42: Symbol Undefined _D5mydll1ii"
> > 
> > It seems that export doesn't work for data, only functions.  If you build with -map, you'll see that i is not exported.  I got it working by using this .def file:
> > 
> > LIBRARY "mydll.dll"
> > EXETYPE NT
> > EXPORTS
> > D5mydll1ii
> > 
> > 
> > Then create the import lib with:
> > implib /s mydll.lib mydll.dll
> > 
> > /s adds the underscores.
> > 
> > 
> > If you use extern (C) the symbols will be a lot simpler to read and write, though.  Look at the .map file to see what the actual symbols are.
> 
> Thanks - works :)

Hello,

dmd now exports all values successfully. But when I try to export a class, I get the following errors:

"Error 42: Symbol Undefined _D5mydll1t7__ClassZ
Error 42: Symbol Undefined _D5mydll1t5_ctorMFZC11mydll1t"

Source of mydll.d is:

export class t {

	export this();

}

Source of mydll2.d is:

import std.stdio: writefln;

export class t {

	export this() {
		writefln("hello world!");
	}
}

Source of test.d:

pragma(lib, "mydll.lib");
import mydll;

void main() {

	t myTest = new t();

}

When I export D5mydll1t7__ClassZ in my def-File, I can compile it but when I try to create a new instance of t, I get an access violation :(.
May 13, 2010
On 13.05.2010 18:23, Nrgyzer wrote:
> Nrgyzer Wrote:
> dmd now exports all values successfully. But when I try to export a class, I get the following errors:
>
> "Error 42: Symbol Undefined _D5mydll1t7__ClassZ
> Error 42: Symbol Undefined _D5mydll1t5_ctorMFZC11mydll1t"
>
> Source of mydll.d is:
>
> export class t {
> 	
> 	export this();
> 	
> }
>
> Source of mydll2.d is:
>
> import std.stdio: writefln;
>
> export class t {
>
> 	export this() {
> 		writefln("hello world!");
> 	}
> }
>
> Source of test.d:
>
> pragma(lib, "mydll.lib");
> import mydll;
>
> void main() {
> 	
> 	t myTest = new t();
> 	
> }
>
> When I export D5mydll1t7__ClassZ in my def-File, I can compile it but when I try to create a new instance of t, I get an access violation :(.

Never tried exporting a class, but there's some info on this page:

http://prowiki.org/wiki4d/wiki.cgi?BestPractices/DLL