dll error

Rainer Schuetze r.sagitario at gmx.de
Thu Dec 1 15:11:56 PST 2011


On 01.12.2011 18:01, sdv wrote:
> a.d
>
> ----------------------------
> import core.runtime;
> import core.sys.windows.windows;
> import core.sys.windows.dll;
>
> //import mach3plugins;
>
> __gshared HINSTANCE g_hInst;
> extern (Windows) BOOL DllMain(HINSTANCE hInstance, ULONG ulReason, LPVOID
> pvReserved)
> {
>      switch (ulReason) {
>          case DLL_PROCESS_ATTACH:
>              g_hInst = hInstance;
>              dll_process_attach( hInstance, true );
>              break;
>          case DLL_PROCESS_DETACH:
>              dll_process_detach( hInstance, true );
>              break;
>          case DLL_THREAD_ATTACH:
>              dll_thread_attach( true, true );
>              break;
>          case DLL_THREAD_DETACH:
>              dll_thread_detach( true, true );
>              break;
>          default:
>
>      }
>      return true;
> }
>
>
> //D, C, C++, Pascal, Windows, System
>
> extern (C) export void MyVer0()
> {
> }
>
> extern (C) export void MyVer1()
> {
> }
>
> extern (C) export void MyVer2()
> {
> }
> ----------------------------------
> out:
> _MyVer0
> MyVer1
> MyVer2
>

You have run into a bug in the linker: 
http://d.puremagic.com/issues/show_bug.cgi?id=3956

A workaround is to use a "noop" def-file:

EXETYPE      NT
LIBRARY      "a.dll"
CODE         PRELOAD DISCARDABLE
DATA         PRELOAD MULTIPLE

EXPORTS
	_MyVer0            = _MyVer0            PRIVATE
	_MyVer1            = _MyVer1            PRIVATE
	_MyVer2            = _MyVer2            PRIVATE


More information about the Digitalmars-d mailing list