View mode: basic / threaded / horizontal-split · Log in · Help
June 19, 2007
DLL Linking
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
Re: DLL Linking
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
Re: DLL Linking
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
Re: DLL Linking
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
Re: DLL Linking
You need to create a .def file and pass it to dmd.
June 19, 2007
Re: DLL Linking
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.
Top | Discussion index | About this forum | D home