Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Синтаксис файлов определения модуля(*.def), Как ими пользоваться? 
:(
    Опции темы
NiТR0
  Дата 7.10.2005, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 28.6.2005

Репутация: нет
Всего: нет



Захотел использовать *.def для экспорта ф-ий.Нашёл в инете след. материал:
Цитата

Файлы определения модуля MyDLL.def :
Код

LIBRARY "MyDLL"
DESCRIPTION "MyDLL - пример DLL-библиотеки"
EXPORTS MyFunction @1

В строке экспорта функции можно указать ее порядковый номер, поставив перед ним символ @. Этот номер будет затем использоваться при обращении к GetProcAddress (). На самом деле компилятор присваивает порядковые номера всем экспортируемым объектам. Однако способ, которым он это делает, отчасти непредсказуем, если не присвоить эти номера явно. В строке экспорта можно использовать параметр NONAME. Он запрещает компилятору включать имя функции в таблицу экспортирования DLL:
Код

MyFunction @1 NONAME

...Приложениям, загружающим библиотеки DLL динамически, потребуется передавать в GetProcAddress порядковый номер, а не имя функции.

Так вот. НЕ РАБОТАЕТ!
Пишет:
— для 1 строки :
error C2143: syntax error : missing ';' before 'string'
error C2501: 'LIBRARY' : missing storage-class or type specifiers
— для 3 строки :
error C2018: unknown character '0x40'
Вопрос: ПОЧЕМУ? ... и КАК БЫТЬ?
Подскажите пожалуйста.
Спасибо.


PM MAIL   Вверх
chaos
Дата 7.10.2005, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 4
Всего: 44



а кто за тебя будет писать EXPORTS
вот тебе пример деф файла

EXPORTS
Func1 @1
Func2 @2
Func3 @3


Это сообщение отредактировал(а) chaos - 7.10.2005, 12:45
PM WWW   Вверх
Earnest
Дата 7.10.2005, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Экспорт функций с помощью def- файла - дело геморройное.
Во-первых, там должны быть истинные (decorated) имена, которые весьма отличаются от имен, которые ты пишешь в C++ файле.
Во-вторых, если ты изменяешь определение функции - будь добр изменить строку в def-файле...
Короче, def-файл - это прошлый век (или если программа на чистом C)

Гораздо проще так: функции, которые экспортируешь, должны быть объявлены как __declspec(dllexport). Соответственно, в тех модулях, где ты их используешь (импортируешь), они должны быть объявлены как __declspec(dllimport). Поскольку плодить по 2 хедера (с описаниями функций для экспорта и импорта) весьма неудобно, можно поступить так:

1) где нибудь в обще-доступном хедере пишешь такие строки
Код

#ifdef _XXXDLL
   #define XXX_API __declspec(dllexport)
#else
   #define XXX_API __declspec(dllimport)
#endif

2) в параметрах препроцессора для своей DLL добавляешь символ _XXXDLL

3) экспортируемые функции и классы объявляешь так:
Код

XXX_API void MyFunc(...);
class XXX_API myclass 
{
};


Дальше все экспортируется и импортируется само...

Это сообщение отредактировал(а) Earnest - 7.10.2005, 14:27


--------------------
...
PM   Вверх
NiТR0
Дата 7.10.2005, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 28.6.2005

Репутация: нет
Всего: нет



Так я уже делал.
Просто хотел попробовать
Все работает, на самом деле, просто я def includom подключал.
Убрал и всё хорошо. =)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0426 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.