C# Interop
Robert Jacques
sandford at jhu.edu
Tue Feb 1 10:54:37 PST 2011
On Tue, 01 Feb 2011 13:33:20 -0500, Rainer Schuetze <r.sagitario at gmx.de>
wrote:
>
> Robert Jacques wrote:
>> On Tue, 01 Feb 2011 03:05:13 -0500, Rainer Schuetze
>> <r.sagitario at gmx.de> wrote:
>>>
>>> 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.
>> Yes, I pointed out in another thread that D loading D DLLs can work
>> around this issue, but the original post was about calling a D DLL from
>> another language, specifically C#, where the limitation in XP still
>> exists. (Of course, you might be able to port the work around to C#.
>> Hmm...)
>
> The workaround is not about D loading a D DLL. Visual D lives happily in
> the C++/C# world of Visual Studio, even on XP. It's the magic inside
> dll_process_attach() that sets up TLS for existing threads and patches
> the loader structures to make XP think the DLL was loaded at startup
> (where implicite TLS works). The downside is that the DLL cannot be
> unloaded, though.
Thanks, again. Though the pros and cons of this should be listed in the
docs somewhere.
>>> > I've listed some example code from my project below:
>> [snip]
>>
>>> 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
>> Thanks. It was D2, but it was forked a while ago. Given that the
>> recommended way of doing this might change in the future, a string
>> mixin in core.dll_helper might be appropriate.
>
> I don't like mixins too much, but a standard_DllMain that you can
> forward to from DllMain, might be a good idea to include into the
> runtime library.
Yes, on second thought, a standard_DllMain is the better solution.
More information about the Digitalmars-d
mailing list