Visual Studio экспорт символа из Exe - PullRequest
0 голосов
/ 21 июня 2011

Я пытаюсь экспортировать символы из исполняемого файла - главное в exe - это интерактивная оболочка, а экспортируемые символы предоставляют функциональность внешним программам.

Это мой текущий макрос экспорта:

#define LIB_EXP extern "C" __declspec(dllexport) void __cdecl

Экспортируемая функция:

LIB_EXP Register() { /**/ }

Если я использую cl.exe напрямую - без каких-либо ключей - я получаю следующую таблицу символов, которая выглядит хорошо:

00000000 characteristics
4E00E611 time date stamp Tue Jun 21 20:42:25 2011
    0.00 version
       1 ordinal base
       1 number of functions
       1 number of names

ordinal hint RVA      name

      1    0 00001000 Register

Summary

    4000 .data
    5000 .rdata
    2000 .reloc
   11000 .text

Компиляция с VS 2010 приводит к следующей таблице символов:

00000000 characteristics
4E00E369 time date stamp Tue Jun 21 20:31:05 2011
    0.00 version
       1 ordinal base
       1 number of functions
       1 number of names

ordinal hint RVA      name

      1    0 00011005 Register = @ILT+0(_Register)

Summary

    1000 .data
    1000 .idata
    3000 .rdata
    1000 .reloc
    1000 .rsrc
    6000 .text
   10000 .textbss

Поскольку программы, которые импортируют этот exe-файл, используют позднюю привязку и ищут экспортированные функции через «GetProcAddress», я зависим от того, какое имя функции точно соответствует указанному. Кто-нибудь знает, откуда взялся этот беспорядок " = @ ILT + 0 (_Register) ", который несколько напоминает искажение имени и как мне от него избавиться? VS-C ++ - проект использует шаблон «пустой проект» и не изменяется…

1 Ответ

1 голос
/ 22 июня 2011

Dumpbin использует файл .pdb для предоставления дополнительной информации. Он содержит отладочную информацию, проект Visual Studio генерирует ее по умолчанию. Ваша оригинальная версия, скомпилированная вручную, не создала .pdb. Удалите .pdb, чтобы получить тот же вывод.

...