2016-04-16 5 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)); 
} 

Compile библиотека с dmd -lib library/somelib.d -ofsomelib.a (или .lib на окнах)

Compile исполняемым с dmd app.d -Iwrapper somelib.a -ofapp (или .lib/.exe на окнах)

-Iwrapper я вместо того, чтобы указать имя файла, так что имена модулей могут соответствовать путь к файлу/папке, потому что имя модуля wrapper/somelib.d должно соответствовать имени модуля библиотеки/somelib.d, потому что это то, как имена функций искажаются в D.

Смежные вопросы