我试图通过dlang为游戏制作者制作dll。
我用这个视频作为参考。
https://www.youtube.com/watch?v=jkgMxrDvwPs
此视频演示了如何通过c ++制作dll。
#define GMEXPORT extern "C" __declspec(dllexport)
GMEXPORT double cube(double n){
return n*n*n;
}
GMEXPORT double aplusb(double a, double b){
return a+b;
}
我尝试将此代码翻译为dlang。
我用这篇文章作为参考。
https://wiki.dlang.org/Win32_DLLs_in_D#DLLs_with_a_C_Interface
import core.sys.windows.dll;
import core.sys.windows.windows;
import std.stdio;
__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:
assert(false);
}
return true;
}
extern (C) {
double cube(double n) {
return n*n*n;
}
double aplusb(double a, double b) {
return a+b;
}
}
我用dmd(x86)构建了dub。
dub.json
{
"name": "example",
"targetType": "dynamicLibrary"
}
然后我尝试在游戏制作者中使用此dll,如参考视频。 但我得到了这个错误。
Error defining an external function.
at gml_Object_object0_CreateEvent_1 (line 1) - dll_cube = external_define("example.dll", "cube", dll_cdecl, ty_real, 1, ty_real);
接下来我该怎么做?
谢谢。