Thread overview
DLL Linking
Jun 19, 2007
vermi
Jun 19, 2007
vermi
Jun 19, 2007
Extrawurst
Jun 19, 2007
vermi
Jun 19, 2007
Hoenir
Jun 19, 2007
vermi
June 19, 2007
Hi, i'm trying to build a dll with our favorite langage, but I have a little problem. For now it's juste an "empty dll" (with just DllMain).
I think the better is to show you the shell ouput :

dmd.exe -O -w  -IC:\dmd\src\phobos  -IK:\Projects\D\V4D -c main.d -ofobj\Release\main.obj

dmd.exe -ofbin\Release\V4D.dll  obj\Release\main.obj  phobos.lib
link obj\Release\main,bin\Release\V4D.dll,,phobos.lib+user32+kernel32/noi;
OPTLINK (R) for Win32  Release 7.50B1
Copyright (C) Digital Mars 1989 - 2001  All Rights Reserved

OPTLINK : Warning 23: No Stack
obj\Release\main.obj(main)
 Error 42: Symbol Undefined __acrtused_dll
OPTLINK : Warning 134: No Start Address


I have looked on the site and have found a page (don't remember the url) telling to remove de -NL switch, add a .def file, ... But it's visibly not my problem :/.

Can anyone help me ?
June 19, 2007
So strange, I have added a void main() {} And now it's seem to work !
I have a DllMain and a main... Ôo
DllMain is executed when the dll is loaded.

An Explaination ?



vermi Wrote:

> Hi, i'm trying to build a dll with our favorite langage, but I have a little problem. For now it's juste an "empty dll" (with just DllMain).
> I think the better is to show you the shell ouput :
> 
> dmd.exe -O -w  -IC:\dmd\src\phobos  -IK:\Projects\D\V4D -c main.d -ofobj\Release\main.obj
> 
> dmd.exe -ofbin\Release\V4D.dll  obj\Release\main.obj  phobos.lib
> link obj\Release\main,bin\Release\V4D.dll,,phobos.lib+user32+kernel32/noi;
> OPTLINK (R) for Win32  Release 7.50B1
> Copyright (C) Digital Mars 1989 - 2001  All Rights Reserved
> 
> OPTLINK : Warning 23: No Stack
> obj\Release\main.obj(main)
>  Error 42: Symbol Undefined __acrtused_dll
> OPTLINK : Warning 134: No Start Address
> 
> 
> I have looked on the site and have found a page (don't remember the url) telling to remove de -NL switch, add a .def file, ... But it's visibly not my problem :/.
> 
> Can anyone help me ?

June 19, 2007
did you take a look at the DLL sample shiped with the dmd compiler ?


vermi schrieb:
> So strange, I have added a void main() {} And now it's seem to work !
> I have a DllMain and a main... Ôo
> DllMain is executed when the dll is loaded.
> 
> An Explaination ?
> 
> 
> 
> vermi Wrote:
> 
>> Hi, i'm trying to build a dll with our favorite langage, but I have a little problem. For now it's juste an "empty dll" (with just DllMain).
>> I think the better is to show you the shell ouput :
>>
>> dmd.exe -O -w  -IC:\dmd\src\phobos  -IK:\Projects\D\V4D -c main.d -ofobj\Release\main.obj
>>
>> dmd.exe -ofbin\Release\V4D.dll  obj\Release\main.obj  phobos.lib  link obj\Release\main,bin\Release\V4D.dll,,phobos.lib+user32+kernel32/noi;
>> OPTLINK (R) for Win32  Release 7.50B1
>> Copyright (C) Digital Mars 1989 - 2001  All Rights Reserved
>>    OPTLINK : Warning 23: No Stack obj\Release\main.obj(main)  Error 42: Symbol Undefined __acrtused_dll
>> OPTLINK : Warning 134: No Start Address 
>>
>>
>> I have looked on the site and have found a page (don't remember the url) telling to remove de -NL switch, add a .def file, ... But it's visibly not my problem :/.
>>
>> Can anyone help me ?
> 
June 19, 2007
If you want the source code of my dll, it's so simple :

//// CODE BEGIN

import std.c.windows.windows;

HINSTANCE hInst;

extern (Windows) BOOL DllMain(HINSTANCE hInstance, ULONG ulReason, LPVOID pvReserved)
{
    switch (ulReason)
    {
        case DLL_PROCESS_ATTACH:
	    break;

        case DLL_PROCESS_DETACH:
	    break;

        case DLL_THREAD_ATTACH:
	    return false;

        case DLL_THREAD_DETACH:
	    return false;

	    default:
    }

    hInst = hInstance;
    return true;
}

// La fonction main() ne sert strictement a rien a part a faire fonctionner la compilation
void main() { }


//// END OF CODE


The void main() { } allow me to link the dll, if I don't put it, the linker tell me the message I wrote before.

This code is copy/past from samples on the digitalmars website.
June 19, 2007
You need to create a .def file and pass it to dmd.
June 19, 2007
I have onen, here it is :

LIBRARY		V4D
EXETYPE		NT
SUBSYSTEM	WINDOWS
CODE		PRELOAD SHARED EXECUTE DISCARDABLE
DATA		PRELOAD SINGLE WRITE


It appears on the command line :
dmd.exe -ofbin\Release\V4D.dll V4D.def obj\Release\main.obj  phobos.lib
( this is the executed command line )
dmd.exe call then :
link obj\Release\main,bin\Release\V4D.dll,,phobos.lib+user32+kernel32,V4D.def/noi;

Has you can see, the .def file appears in both command lines.