May 13, 2010 Re: Export values (enum, int, char[]...) for DLL | ||||
---|---|---|---|---|
| ||||
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 Re: Export values (enum, int, char[]...) for DLL | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nrgyzer | 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 |
Copyright © 1999-2021 by the D Language Foundation