Dll crash in simplest case

Vitalii yvitaliy1980 at yandex.ru
Mon Jan 25 07:58:01 UTC 2021


Hello everyone! I want to create shared library that buffer some 
data and do some calculations, another program will use it. I 
wonder how this simplest code lead to crash (freeze) of dll:
---
// test_dll.d
import std.stdio;
import std.file;
import core.runtime;
import core.sys.windows.windows;
import std.exception;

version (test_dll) {
extern(C) {

export void TestFun() {
     double[int] T;
     foreach (i; 0..10000000) {
         writefln("i:%d",i);
         T[i] = i*1.0;
     }
}

} // extern(C)
} // version (test_dll)

version (test_exe) {
void main(string[] args) {
     if (!"test_dll.dll".exists) {
         writeln("test_dll.dll not exists");
     }

     HMODULE test_dll = cast(HMODULE) 
enforce(Runtime.loadLibrary("test_dll.dll"));

     alias extern(C) void function() Test_type;
     Test_type TestFun = cast(Test_type) 
enforce(GetProcAddress(test_dll, "TestFun"));
     TestFun();
} // main
} // version (stec_app)
---
Code compiled with options (version of dmd - 2.095.0, Windows 7 
SP1, Intel Core i7 4790):
dmd -m64 -version=test_dll -shared -oftest_dll.dll -L/DLL 
test_dll.d dll.d
dmd -m64 -version=test_exe test_dll.d
Here dll.d - usual wrapper for DllMain 
(https://wiki.dlang.org/Win32_DLLs_in_D).

Any ideas? How to allocate memory in shared library properly?


More information about the Digitalmars-d-learn mailing list