On Saturday, 2 July 2022 at 20:43:41 UTC, Vinod KC wrote:
> On Saturday, 2 July 2022 at 14:32:11 UTC, apz28 wrote:
> dmd -of=dimedll.dll dimedll.d dimedll.def
dmd dime.d dimedll.di
Thanks for the reply. Well, I am sorry to say that your suggestions resulted in failure.
First of all, when I used this command -- dmd -of=dimedll.dll dimedll.d dimedll.def
I got this error message-
Error: unrecognized file extension dll
.
So I avoided the -of=dimedll.dll
part.
Then I compiled it with this command - dmd -H dimedll.d dimedll.def
And I got some warnings. Here are they.
dimedll.def(2) : warning LNK4017: EXETYPE statement not supported for the target platform; ignored
dimedll.def(3) : warning LNK4017: SUBSYSTEM statement not supported for the target platform; ignored
dimedll.def(4) : warning LNK4017: CODE statement not supported for the target platform; ignored
dimedll.def(4) : warning LNK4017: DATA statement not supported for the target platform; ignored
Creating library dimedll.lib and object dimedll.exp
I know all of them are from my def
file. Anyways, I stepped forward and tried to run the main file with this dll & lib.
So I ran this command. - dmd dime.d dimedll.di
. But I got this error message.
dime.obj : error LNK2001: unresolved external symbol __D7dimedll12__ModuleInfoZ
dime.exe : fatal error LNK1120: 1 unresolved externals
Error: linker exited with status 1120
First issue - you're using dmd on windows. Dmd gives me errors about the ModuleInfo, while LDC doesn't. This is the LDC download link. Next, change dimedll.d to the following:
module dimedll;
export void testFunc()
{
import std.stdio;
writeln("Lets build our own ime.");
}
and dime.d to the following:
import dimedll; //In case you ever write more functions for dimedll.d;
pragma(lib, "dimedll.lib");
void main()
{
testFunc();
}
Then run ldc2 -shared dimedll.d
and right after that ldc2 dime.d
. If I didn't make a mistake in writing this (I tested it on my own system), it should output a working program that prints the expected output when ran.