Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как создается .def-файл?  (Прочитано 12442 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« : 29-08-2008 11:45 » 

  Всем доброго дня/вечера.

Есть dll-ка, она собирается из нескольких .cpp файлов, в каждом из которых есть экспортируемые функции.

Вопрос: есть ли единый стандарт, который оговаривает в каком порядке все экспортируемые функции появяться в .def-файле?

Например, в порядке обявления в хедере?


Проблема в том, что есть чужой код, который ищет и вызывает (из dll-ки) функцию по номеру (а не по имени). Поэтому становиться выжным порядок функций в .def-файле.

"Руками" правильный .def я могу написать, но автоматически он генериться не правильно Жаль


Есть подозрение, что каждый копилятор делает .def как хочет.... Так ли это?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 29-08-2008 13:02 » 

Артем, думаю, что логично будет располагать их в порядке:
1. линковки модулей
2. расположения в модуле, а след. - порядок в исходнике модуля.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #2 : 01-09-2008 05:26 » 

Это то, конечно, логично...

И когда я создаю их "руками", я так и делаю...

Просто получается, что если мы сгенерим этот файл автоматически, то никто в мире не скажет (если не известно, каким компилятором или tool'ом воспользовались) в каком порядке там будут функции  А черт его знает...
« Последнее редактирование: 01-09-2008 05:31 от Артем » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 01-09-2008 05:39 » 

Не скажу за все компиляторы, но если порядок будет иной, чем в итоговом исполняемом файле, то будет лажа.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 20-11-2009 18:46 » 

когда-то я с этой фигнёй тоже разобрался - была какая-то разовая задача, а теперь того проекта под рукой нет, и в упор не могу вспомнить/понять, почему у меня возник следующий вопрос.

Студия #9
Имеем DLL , в которой есть функция
Код:
bool __declspec(dllexport) F1()
{
return true;

}

в проекте длл лежит также файл .def
Код:
EXPORTS
F1

В другом проекте гружу длл (тут всё нормально), затем пытаюсь получить адрес функции по имени "F1" - не выходит, а по имени "?F1@@YA_NXZ"  (подглядел в Dependency Walker ) адрес достаётся.

Как нормально экспортировать то ?
Записан

Phodopus
Интересующийся

ru
Offline Offline

« Ответ #5 : 23-11-2009 16:01 » 

там где-то extern "C" {} надо дописывать
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 23-11-2009 16:06 » 

кстати да, помогло ))
Код:
extern "C" bool __declspec(dllexport) F1()
{
return true;
}
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines