Эй, ребята, у меня есть несколько быстрых вопросов по Windows DLL.
В основном я использую ifdefs для обработки dllexport и dllimport, мой вопрос на самом деле касается размещения dllexports и dllimports, а также ключевого слова extern.
Я помещаю dllimports / dllexports в заголовочные файлы, но нужно ли мне помещать dllexport и dllimports в актуальное определение?
А как насчет typedefs?
Я ставлю dllimport / dllexport впереди? как в
dllexport typedef map<string, int> st_map
Также, что касается ключевого слова extern, я видел, что оно используется так:
extern "C" {
dllexport void func1();
}
Я также видел, как он используется так:
extern dllexport func1();
Один включает в себя «С», а другой нет, мой вопрос, в чем разница, и мне нужно его использовать? Если я это сделаю, то буду ли я использовать его как для dllexport, так и для dllimport, а также должен ли я использовать его как для объявлений файла заголовка, так и для определений?
Мой проект будет общей библиотекой, он содержит несколько файлов классов, которые я хочу экспортировать, некоторые typdefs, которые я хочу экспортировать, и некоторые глобальные функции, которые я также хочу экспортировать все в dll.
Кто-нибудь просветит меня, пожалуйста?
EDIT:
Хорошо, я подумал, что опубликую небольшой фрагмент того, что я сделал, также обратите внимание, что я собираю библиотеку для Linux и Windows, поэтому я проверяю это:
mydll.h
#ifdef WINDOWS
# ifdef PSTRUCT_EXPORT
# define WINLIB __declspec(dllexport)
# else
# define WINLIB __declspec(dllimport)
# endif
#else
# define WINLIB
#endif
WINLIB void funct1();
Теперь в исходном коде:
mydll.cpp
#define PSTRUCT_EXPORT
void funct1() <---- do i need to add WINLIB in front of it?
Or is doing it in the header enough?