Robert Jacques wrote:
On Mon, 31 Jan 2011 16:25:11 -0500, Eelco Hoogendoorn
<hoogendoorn.ee...@gmail.com> wrote:
[...]
Lastly, D DLLs will only work on Vista/Windows 7/later. They will not
work on XP. This is due to a long known bug with DLLs and thread local
storage in general on XP. Also, you'll have to use 32-bit C# currently,
as DMD isn't 64-bit compatible yet. (Walter is hard at work on a 64-bit
version of DMD, but it will be Linux only at first, with Windows
following sometime later)
XP TLS support with dynamically loaded DLLs is fixed for some time now
with a workaround implemented in druntime. Also, DLLs can be used in
multi-threading environments.
> I've listed some example code from my project below:
>
> // Written in the D Programming Language (www.digitalmars.com/d)
> ///Basic DLL setup and teardown code. From D's/bugzilla's public domain
> example code.
> module dll;
>
> import std.c.windows.windows;
> import std.c.stdlib;
> import core.runtime;
> import core.memory;
>
> extern (Windows)
> BOOL DllMain(HINSTANCE hInstance, ULONG ulReason, LPVOID pvReserved) {
> switch (ulReason) {
> case DLL_PROCESS_ATTACH:
> Runtime.initialize();
> break;
> case DLL_PROCESS_DETACH:
> Runtime.terminate();
> break;
> case DLL_THREAD_ATTACH:
> case DLL_THREAD_DETACH:
> return false;
> }
> return true;
> }
>
This DLLMain code is a bit outdated (is it D1?), the current proposed
version is here: http://www.digitalmars.com/d/2.0/dll.html
Unfortunately, there is a regression in the latest dmd release (2.051):
http://d.puremagic.com/issues/show_bug.cgi?id=5382 that causes TLS not
to be initialized for new threads created by the host application.
Rainer