Захотел использовать *.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++' — Павел Кузнецов
Здравствуйте, Аноним, Вы писали:
А>Захотел использовать *.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"
Здравствуйте, Аноним, Вы писали:
А>Захотел использовать *.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?
Здравствуйте, Аноним, Вы писали:
А>Пишет:
А> — для 1 строки :
А>error C2143: syntax error : missing ';' before 'string'
А>error C2501: 'LIBRARY' : missing storage-class or type specifiers
А> — для 3 строки :
А>error C2018: unknown character '0x40'
А>Вопрос: ПОЧЕМУ? ... и КАК БЫТЬ?
А>Подскажите пожалуйста.
Ты компилируешь DEF-файл С++ компилятором
А надо дать его линкеру.
Ребят, огромное спасибо. Я это... ну... includom его... ну вы поняли...
Теперь всё работает. =)
P.S. Я не волшебник, я только учусь.