Синтаксис файлов определения модуля (*.def)
От: Аноним  
Дата: 07.10.05 09:24
Оценка:
Захотел использовать *.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'
Вопрос: ПОЧЕМУ? ... и КАК БЫТЬ?
Подскажите пожалуйста.
Спасибо.

10.10.05 22:32: Перенесено модератором из 'C/C++' — Павел Кузнецов
Re: Синтаксис файлов определения модуля (*.def)
От: Игoрь Украина  
Дата: 07.10.05 09:45
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Захотел использовать *.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'
А>Вопрос: ПОЧЕМУ? ... и КАК БЫТЬ?
А>Подскажите пожалуйста.
А>Спасибо.

Вроде все верно... Сдается мне, что Вы def файл include'ом подключаете
а надо только в опциях линкера прописать /DEF:"MyDLL.def"
Re: Синтаксис файлов определения модуля (*.def)
От: FoolS.Top Армения  
Дата: 07.10.05 10:41
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Захотел использовать *.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'
А>Вопрос: ПОЧЕМУ? ... и КАК БЫТЬ?
А>Подскажите пожалуйста.
А>Спасибо.

Уточните, пожалуйста, эти сообщения получаются во время трансляции DLL?
Feierlich, misterioso
Re: Синтаксис файлов определения модуля (*.def)
От: Кодёнок  
Дата: 07.10.05 12:03
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Пишет:

А> — для 1 строки :
А>error C2143: syntax error : missing ';' before 'string'
А>error C2501: 'LIBRARY' : missing storage-class or type specifiers

А> — для 3 строки :
А>error C2018: unknown character '0x40'
А>Вопрос: ПОЧЕМУ? ... и КАК БЫТЬ?
А>Подскажите пожалуйста.

Ты компилируешь DEF-файл С++ компилятором А надо дать его линкеру.
Re: Синтаксис файлов определения модуля (*.def)
От: -NiTR0-  
Дата: 07.10.05 13:26
Оценка:
Ребят, огромное спасибо. Я это... ну... includom его... ну вы поняли...
Теперь всё работает. =)

P.S. Я не волшебник, я только учусь.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.