std.gc.setHandle causes Access Violation

Sjoerd van Leent svanleent at gmail.com
Thu May 18 10:54:21 PDT 2006


As far as I know, my implementation isn't much different. The init 
method is properly called, there is a value passed to it. But I still 
get the same problem.

Regards,
Sjoerd

Unknown W. Brackets schreef:
> I'm doing this in some code:
> 
> extern (C)
> export void initialize(void* gc)
> {
>     std.gc.setGCHandle(gc);
>     _minit();
>     _moduleCtor();
>     _moduleUnitTests();
> }
> 
> And then to load it:
> 
> alias void function(void*) initialize_fp;
> initialize_fp init_f;
> 
> init_f = GetLibraryFunction!(initialize_fp)(module, "initialize");
> 
> init_f(std.gc.getGCHandle());
> 
> And I haven't had any problems.  That said, I haven't yet updated to the 
> latest latest DMD version.
> 
> -[Unknown]
> 
> 
>> Using a shared DLL and a client Executable, both written in D, I'd 
>> like to be able to use std.gc.setGCHandle, as mentioned in the Win32 
>> DLL example. However, I am getting an Access Violation Error, right 
>> when the call to std.gc.setHandle is made.
>>
>> Does anyone know about this problem, and how to solve it?
>>
>> This is the code setting the GC handler on the DLL side:
>>
>> extern(C) export void libraryInit(void * gc) {
>>     MessageBoxA(null, "Library Initializing", "Library", MB_OK);
>>     std.gc.setGCHandle(gc);
>>     _minit();
>>     _moduleCtor();
>> }
>>
>> This is the code, on the Executable side:
>>
>> alias void function(void * gc) LibraryInitFP;
>>
>> ...
>>
>> fp = GetProcAddress(mod.h, "libraryInit");
>> if(fp != null) {
>>     mod.libraryInitFP = cast(LibraryInitFP)(fp);
>> }
>>
>> if(mod.libraryInitFP != null) {
>>     (*mod.libraryInitFP)(std.gc.getGCHandle());
>> }
>>
>> Regards,
>> Sjoerd



More information about the Digitalmars-d mailing list