I am sure this a stupid mistake on my part.... I create a DLL Test0.dll from
the following
file (Test0.d):
=========
module Test0;
import std.stdio;
class Test0
{
export
{
int Test0( string ID0 )
{
printf("<Test0: ID={%s}> ",ID0.ptr);
return ID0.length+5;
}
} // export end
}
export Test0 instTest0() { return new Test0(); }
=========
Lib listing shows the following symbols:
Publics by name module
_D5Test05Test05Test0MFAyaZi _D5Test05Test05Test0MFAyaZi
_D5Test09instTest0FZC5Test05Test0 _D5Test09instTest0FZC5Test05Test0
Publics by module
_D5Test05Test05Test0MFAyaZi
_D5Test05Test05Test0MFAyaZi
_D5Test09instTest0FZC5Test05Test0
_D5Test09instTest0FZC5Test05Test0
=======
It seems everything exported properly. I wrote the following Test Harness
Test0h.d:
============
module Test0h;
import Test0;
import std.stdio;
int main()
{
Test0 t0 = instTest0();
puts("Starting main()");
auto tret = t0.Test0("Harness Test0h");
printf("T0 Ret=%d\n",tret);
puts("Ending main()");
return 0;
}
=========
with the following Import Definition file:
=========
module Test0;
import std.stdio;
class Test0
{
int Test0(string ID0);
}
Test0 instTest0();
=========
Watching the compile in verbose mode I get the following with the concluding
error:
==============
binary I:\Progs\dmd2\windows\bin\dmd.exe
version v2.050
config I:\Progs\dmd2\windows\bin\sc.ini
parse Test0h
importall Test0h
import object
(I:\Progs\dmd2\windows\bin\..\..\src\druntime\import\object.di)
import Test0 (Test0.di)
import std.stdio (I:\Progs\dmd2\windows\bin\..\..\src\phobos\std\stdio.d)
import core.stdc.stdio
(I:\Progs\dmd2\windows\bin\..\..\src\druntime\import\core
\stdc\stdio.di)
..........
import std.container
(I:\Progs\dmd2\windows\bin\..\..\src\phobos\std\container.d)
semantic Test0h
semantic2 Test0h
semantic3 Test0h
code Test0h
function main
I:\Progs\dmd2\windows\bin\link.exe Test0h,,,"Test0.lib"+user32+kernel32/noi;
OPTLINK (R) for Win32 Release 8.00.8
Copyright (C) Digital Mars 1989-2010 All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
Test0h.obj(Test0h)
Error 42: Symbol Undefined _D5Test012__ModuleInfoZ
=========
I can't get the Test0 to be recognized. If I add it to the compile then of
course it works,
and runs properly, but that defeats the purpose of the DLL. Can someone point
out my error?