Class 从D中的静态库加载类

Class 从D中的静态库加载类,class,static-libraries,d,static-linking,Class,Static Libraries,D,Static Linking,我从以下答案中了解了如何从静态库加载函数: 但是我需要从静态库中加载一个类,而不仅仅是一个函数,我如何才能实现它?类在导出的二进制文件中实际上不是一个东西。它们基本上只是一个奇特的结构。结构基本上就是包含数据的内存布局。库大多只包含函数 因此,您实际上需要创建一个包含成员函数声明的类,并在其中添加成员变量,如下所示: 库/somelib.d: modulesomelib; 福班 { 私人长期会员; 这个(长n) { 成员=n*2; } int func(int x) { 返回演员阵容(int)(

我从以下答案中了解了如何从静态库加载函数:


但是我需要从静态库中加载一个类,而不仅仅是一个函数,我如何才能实现它?

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

因此,您实际上需要创建一个包含成员函数声明的类,并在其中添加成员变量,如下所示:

库/somelib.d:

modulesomelib;
福班
{
私人长期会员;
这个(长n)
{
成员=n*2;
}
int func(int x)
{
返回演员阵容(int)(x+成员);
}
}
包装器/somelib.d:

模块somelib;//模块名称需要匹配!
福班
{
私人长期会员;
这个(长n);
int func(int x);
}
附录d:

模块应用;
进口std.stdio;
导入somelib;
void main()
{
Foo-Foo=新Foo(4);
书面语(foo:,foo);
书面形式(“职能:,财务职能(5));
}
使用somelib.a的dmd-lib library/somelib.d编译库(或windows上的.lib)

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

我没有指定文件名,而是指定了
-Iwrapper
,这样模块名就可以与文件/文件夹路径匹配,因为wrapper/somelib.d的模块名必须与library/somelib.d的模块名匹配,因为函数名在d中就是这样被破坏的