加载类从静态库中的d
问题描述:
我读了如何从一个静态库从这个答案加载功能:https://*.com/a/10366323/6123767加载类从静态库中的d
但我需要加载从静态库中的类,而不仅仅是一个功能,我怎么能实现它?
答
类实际上不是导出的二进制文件中的东西。它们基本上只是一个奇特的结构。结构基本上就是数据的内存布局。图书馆大多只包含功能。
所以你真正想要做的是创建一个包含成员函数声明一个类并添加成员变量的原因是这样的:
库/ somelib.d:
module somelib;
class Foo
{
private long member;
this(long n)
{
member = n * 2;
}
int func(int x)
{
return cast(int) (x + member);
}
}
包装/ 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
(或.LIB在Windows上)
编译dmd app.d -Iwrapper somelib.a -ofapp
(或.LIB/.exe文件在Windows上)
我做-Iwrapper
,而不是指定的文件名,以便模块名称可以匹配的可执行文件/文件夹路径,因为包装器/ somelib.d 的模块名称必须为与库/ somelib.d的模块名称相匹配,因为那些函数名称如何在D中被损坏。