2016-04-16 63 views

回答

3

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

所以你真正想要做的是创建一个包含成员函数声明一个类并添加成员变量的原因是这样的:

库/ 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中被损坏。