正在从 D 中的静态库加载 类

Loading Classes From Static Library in D

我从这个答案中阅读了如何从静态库加载函数:

但是我需要从静态库中加载一个class,而不只是一个函数,我该如何实现?

classes 实际上不是导出二进制文件中的东西。它们基本上只是一个花哨的结构。结构基本上只是内存与数据的布局。库大多只包含函数。

所以你真正想要做的是创建一个包含成员函数声明的 class 并在其中添加成员变量,如下所示:

library/somelib.d:

module somelib;

class Foo
{
    private long member;

    this(long n)
    {
        member = n * 2;
    }

    int func(int x)
    {
        return cast(int) (x + member);
    }
}

wrapper/somelib.d:

module somelib; // module names need to match!

class Foo
{
    private long member;
    this(long n);
    int func(int x);
}

app.d:

module app;
import std.stdio;
import somelib;

void main()
{
    Foo foo = new Foo(4);
    writeln("foo: ", foo);
    writeln("func: ", foo.func(5));
}

使用 dmd -lib library/somelib.d -ofsomelib.a(或 windows 上的 .lib)编译库

使用 dmd app.d -Iwrapper somelib.a -ofapp(或 windows 上的 .lib/.exe)编译可执行文件

我做了 -Iwrapper 而不是指定文件名,因此模块名称可以匹配 file/folder 路径,因为 wrapper/somelib.d 的模块名称必须 匹配 library/somelib.d 的模块名称,因为这就是函数名称在 D.

中被破坏的方式