![]() |
eXeL@B —› Программирование —› Экспорт декорированных имён |
Посл.ответ | Сообщение |
|
Создано: 06 октября 2012 10:07 · Личное сообщение · #1 Обычно задают вопрос, как в своей dll избавиться от экспорта вида ??0__non_rtti_object@std@@QAE@ABV01@@Z У меня же обратная задача - пишу вроппер для dll, в ней порядка двух сотен функций, прототипы которых я и не знаю, поэтому делаю DEF-файл со списком оригинальных функций, а в программе делаю стаб вида: Code:
Всё ничего, но в экпорте есть пара функций вида _Func1@0 и _Func2@4, если в DEF-файле указать Code:
то в экспорт попадает имя только до @ Вопрос: как добиться, чтобы в экспорт ф-и попадали в декорированном (_Func1@0) виде? ![]() |
|
Создано: 06 октября 2012 10:48 · Поправил: plutos · Личное сообщение · #2 http://msdn.microsoft.com/en-us/library/d91k01sh.aspx: The EXPORTS statement lists the names and, optionally, the ordinal values of the functions exported by the DLL. You assign the function an ordinal value by following the function's name with an at sign (@) and a number. When you specify ordinal values, they must be in the range 1 through N, where N is the number of functions exported by the DLL. For example, a DLL that contains the code to implement a binary search tree might look like the following: LIBRARY BTREE EXPORTS Insert @1 Delete @2 Member @3 Min @4 Т.е. может там нужно просто space перед @? Если речь идет об ординалах, конечно же. ----- Give me a HANDLE and I will move the Earth. ![]() |
|
Создано: 06 октября 2012 10:58 · Поправил: GroundHog · Личное сообщение · #3 plutos пишет: Т.е. может там нужно просто space перед @? Если речь идет об ординалах, конечно же. Дело не в ординалах, а в декорированных именах. Если самому объявлять имена ф-й с @ в имени, то они обрезаются ровно по собачке. Пока проблему решил, заменив @ на другой символ и навесив на Post Build Events патч бинарника утилитой, но как это не айс. ![]() |
|
Создано: 06 октября 2012 12:46 · Поправил: HiEndsoft · Личное сообщение · #4 Я так делаю: def-файл: Code:
c-файл: Code:
В итоге в экспорте имею одну и ту же функцию задекрорированную и нет, типа так: Code:
----- продавец резиновых утёнков ![]() |
![]() |
eXeL@B —› Программирование —› Экспорт декорированных имён |