Я пытаюсь экспортировать символы из исполняемого файла - главное в 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 ++ - проект использует шаблон «пустой проект» и не изменяется…