Hello,
I'm having another attempt at solving ModuleInfo not being exported on Windows.
This is an issue as it prevents D executable importing a D module in a DLL.
So far I've managed to get exported and added to the importedModules member, except:
Its being added as ModuleInfo**[]
rather than ModuleInfo*[]
.
In dmodule.d ~364: Symbol* isym; /// Import version of csym
In toobj.d ~190 in the importedModules handling:
import std.algorithm : canFind;
if (mod.ident.toString().canFind("second")) {
if (!mod.isym) {
mod.isym = s.toImport(mod.loc);
outdata(mod.isym);
}
s = mod.isym;
//s.Sflags |= SFLweak;
dtb.xoff(s, 0, TYnptr);
} else {
/* Weak references don't pull objects in from the library,
* they resolve to 0 if not pulled in by something else.
* Don't pull in a module just because it was imported.
*/
s.Sflags |= SFLweak;
dtb.xoff(s, 0, TYnptr);
}
And of course the export:
objmod.export_symbol(m.csym, 0);
This is very frustrating, what should be quite simple, doesn't appear to be easily solved (by me) and is a massive blocker.
Note: in my above code I am hard coding it to only apply to the "second" module, to prevent needing to build druntime.