2012-05-19 3 views
3

Я создал как статический lib, так и EXE-файл (который использует статический lib), но когда я открываю EXE в проекте IDA, экспорт также отображается в EXE ,EXE экспортирует статический экспорт lib, а также

Я знаю, что они должны быть экспортированы в .lib, но почему они появляются в качестве экспорта в EXE тоже?

EDIT: Вот экспорта/импорта (они находятся в отдельных файлах заголовков)

Здесь экспорт:

#define NC_LIBEXPORT(a) extern "C" __declspec(dllexport) a __cdecl 
NC_LIBEXPORT(VOID) rol8(unsigned char* a, unsigned char b); 

и импорт:

extern "C" VOID rol8(unsigned char* a, unsigned char b); 
+2

Это не выход из файла заголовка, атрибут прикреплен к идентификатору в .obj-файле внутри .lib. Вам нужно будет создать специальную версию .lib, которая предотвращает применение __declspec. Не уверен, что это того стоит, если вы также связываете .lib с DLL, это не похоже на то, что какой-либо код действительно будет использовать экспорт. –

+0

@ Hans Да, я просто так медленно работал. Построив тестовый проект! –

+0

Спасибо @HansPassant:] Это было! Не понимали, что для статических библиотек не требуется 'dllexport':] Для этого проекта две статические библиотеки - отлично. Просто редактируйте макрос. – Qix

ответ

5

You необходимо убедиться, что при создании статической библиотеки вы не используете __declspec(dllexport).

Если вы хотите использовать одну и ту же библиотеку в DLL и в своем исполняемом файле, и вы не хотите, чтобы исполняемый файл экспортировал символы, вам необходимо использовать файл DEF, а не __declspec(dllexport).

+0

Это не так. Я добавлю источник на вопрос, держись ... – Qix

+0

Импорт/экспорт в отдельных файлах заголовков ... – Qix

+0

Я использую импорт (второй блок кода) в своем исполняемом файле. – Qix

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