如何通过Dlang为GameMaker Extension制作Windows DLL?

时间:2016-10-30 04:30:03

标签: windows dll d game-maker gml

我试图通过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);

接下来我该怎么做?

谢谢。

0 个答案:

没有答案