Может класс экспорта C++ от DLL

Я хотел бы знать, является ли экспорт класса (__ declspec (dllexport) в VC ++) своего рода стандартом (ANSI, ISO...)
Я хотел бы знать, есть ли у кого-то уже попытка сделать то же с компилятором C++ Intel и gcc (mingw на окнах) и если возможно смешать dlls, сгенерированный из различных компиляторов (я действительно сомневаюсь, что это возможно),

Спасибо

9
задан user246456 16 January 2010 в 01:18
поделиться

3 ответа

NO, __ DECLSPEC является специфическим VC ++.

Одной из причин, по которой потребности VC ++, по умолчанию, DLL не выставляют символы за пределами DLL, если явно не требует этого сделать. На POSIX общие объекты выставляют все свои (нестатические) символы, если явно не рассказывает их.

Обновление

В зависимости от вашего комментария, который вы хотите сделать свой код портативным, вы хотите использовать препроцессор и сделать что-то подобное:

#ifdef WIN32
  #ifdef EXPORT_CLASS_FOO
    #define CLASS_FOO __declspec(dllexport)
  #else
    #define CLASS_FOO __declspec(dllimport) 
  #endif
#else
  #define CLASS_FOO
#endif

class CLASS_FOO foo
{ ... };

в проекте, реализующий класс, убедитесь, что добавить export_Class_foo в качестве препроцессора Определение (найдено в проекте | Имя свойства. Под C / C ++ | препроцессор | определения препроцесс). Таким образом, вы экспортируете их при построении DLL, импортируете их, когда вы используете DLL и ничего не делаете специалистики под Unix.

9
ответ дан 4 December 2019 в 12:18
поделиться

Все, что начинается с __ в C ++, является специфическим поставщиком расширение. Я не знаю, поддерживают ли какие-либо другие поставщики компилятора, но это, безусловно, не совместимому кросс-компилятору.

2
ответ дан 4 December 2019 в 12:18
поделиться

Вы должны попытаться удалить «Microsoft Visual Studio Web Authoring Component» (из программ). У меня была та же проблема и удалила этот компонент визуальной студии (подробнее об этом здесь ). Вы потеряете визуальный дизайнер, но VS больше не повесится.

-121--3068047-

Понятие DLL является очень платформенным. Он не охвачен любым даже удаленно универсально применимым стандартом. Если тот факт, сама по себе Acronymy DLL обычно зарезервирована для динамических библиотек Windows. Ненабженные добавления, что-либо конкретное для поддержки DLL в C / C ++, очень зависит от платформы / поставщика.

2
ответ дан 4 December 2019 в 12:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: