Как экспортировать переменную из DLL при компиляции языка D2 с помощью dmd? - PullRequest
7 голосов
/ 15 января 2012

Что является языковым эквивалентом D2 __declspec (dllexport)

У меня есть связь D2 DLL пример кода и работает. Экспорт функций, как в искаженном пространстве имен dmd, так и в стандартном u-искаженном пространстве имен "C", работает как шарм. Но я сталкиваюсь с неисследованными водами в отношении совместного использования (глобальной) переменной int между DLL, а также основной exe-программой ... Я проверил таблицу символов DLL с помощью disabled22_x86, и пока я решил использовать экспорт Директива непосредственно перед объявлением Var, она не отображается в таблице DLL, в то время как функции это делают. Можно ли экспортировать переменные для отображения в DLL с помощью цепочки инструментов Digital Mars dmd?

Ответы [ 3 ]

1 голос
/ 10 мая 2013

Это была ошибка в компиляторе ( Bugzilla 10059 ). Следующий код должен работать сейчас.

export __gshared int foo;
0 голосов
/ 10 декабря 2012

Может быть, вы можете сделать то, что говорит Ральф Тандецки, но в статическом модуле ctor. Вам не нужно явно вызывать какую-либо функцию, все символы будут загружены. Может быть, __gshared тоже будет признателен.

0 голосов
/ 09 августа 2012

В качестве обходного пути, если экспорт или импорт глобальных переменных не работает, тогда напишите функцию-оболочку вида

Type variable;

extern(C) Type * getGlobalVariable()
{
    return &variable;
}

, если вы хотите экспортировать из D в C.

...