2015-07-07 4 views
0

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

DEF файл:

... 
[email protected]@@[email protected]@Z 
[email protected]@[email protected]@[email protected]@@Z 
... 

код изменится с

namespace Base { 

class CLimitOrderBase : public CLimit 
{ 
    ... 
    virtual BOOL foo(CLimitInfo &limitInfo); 
    ... 
}; 

в

virtual BOOL foo(CLimitInfo &limitInfo, bool bCheck = false); 

Как получить новое искаженное имя для изменения в файле DEF?

+1

Почему бы не объявить класс как '__declspec (dllexport)' и забыть о ручном экспортирующих функции, имеющей подогнанные имена? –

+1

Вы меняете его с помощью текстового редактора. Используйте файл .map компоновщика, чтобы увидеть новое имя. –

ответ

1

Добавьте следующие строки в файл заголовка, который каждый заголовочный файл из вашей библиотеки DLL включает в себя (переименование YOURDLL с чем-то значимым):

#ifdef YOURDLL_EXPORTS 
#define YOURDLL_API __declspec(dllexport) 
#else 
#define YOURDLL_API __declspec(dllimport) 
#endif 

Затем объявить экспортируемые классы, как в этом примере:

class YOURDLL_API CLimitOrderBase : public CLimit 
{ 
    ... 
    virtual BOOL foo(CLimitInfo &limitInfo); 
    ... 
}; 

Наконец, определите YOURDLL_EXPORTS в вашем проекте DLL (поле Определения препроцессора в разделе Свойства-> C/C++ -> Препроцессор). Таким образом, вам не потребуется ручное редактирование файла .DEF.

0

Использование dllexport - хорошая идея, но в настоящее время я просто меняю одну функцию существующего большого файла DEF, а .def vs _declspec(dllexport) выходит за рамки этой темы.

Спасибо за комментарий от Hans Passant, я, наконец, понял, как получить искаженное C++ имя функции из Visual Studio

  1. Сформировать .map файл (для г ++, пожалуйста, обратитесь к this answer.):
    • В VS откройте диалоговое окно свойств страницы проекта
    • Нажмите Linker folder
    • Нажмите Debug страница недвижимости
    • Изменить Generate Map File Недвижимость.
  2. Восстановить проект.
  3. Открыто сгенерировано .map файл, поиск имени функции.
  4. Скопируйте новое искаженное имя .def файл
+0

Вы также можете использовать 'dumpbin/exports' в DLL, чтобы получить список всех экспортированных имен. –

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

  • Нет связанных вопросов^_^