Получение информации используя файл DLL

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Den
Сообщения: 62
Зарегистрирован: 09 сен 2004, 15:10

Доброе время суток!

Вопрос возможно слишком сложен, и не для форума (при всем моем уважении к форуму и участникам форума). Но, тем не менее, хочется рассчитывать на помощь … задача в следующем:
Например, в EditBox диалогового окна вводится предложение: «Сколько стоит USB-IrDA?». Затем подгружается dll’ка и используя ее выводится ответ в текстовой файл (находящийся в папке этого проекта), к примеру «USB-IrDA стоит 400р».

Если можно с исходниками! Работаю в Visual C++ 6.0.

С уважением, Den!
BreakPointMAN
Сообщения: 38
Зарегистрирован: 21 июн 2004, 02:59
Откуда: Saratov
Контактная информация:

Непонятно, что тебе конкретно-то надо? Как создавать и подгружать DLL? Как работать с файлами? Или что?
"Разруха не в клозетах, а в головах." (c) Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
Den
Сообщения: 62
Зарегистрирован: 09 сен 2004, 15:10

Спасибо за попытку помочь!
DLL уже создана. Как подгрузить ее? О том, что необходимо уже писал.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

LoadLibrary, GetProcAddress.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Den
Сообщения: 62
Зарегистрирован: 09 сен 2004, 15:10

Можно ли как-то узнать название ф-ии в dll'ке, которая нужна?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Вопрос не понятен. Кто кому нужен?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Название-то экспортируемых DLL-ю функций узнать довольно легко (любой libmaker или микрософтовский Dependensy Walker это все показывает). Сложнее - с набором параметров этих функций...
Den
Сообщения: 62
Зарегистрирован: 09 сен 2004, 15:10

Загружается dll с помощью LoadLibrary (все нормально). Далее в GetProcAddress я должен использовать ф-ию (из dll) которая передает информацию в программу. Название это ф-ции не знаю. Когда ставилась задача предпологалось, что это будет в документации, фиг там.
ВВВ писал, что это довольно легко. Можно поподробней. Что касается параметров, то он один с типом CString.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Den, У тебя какая среда? Если Borland, то там дожна быть утилита либмейкер. Точное название не помню, но что-то вроде makelib.exe или libmake. exe
"Натравливаешь" ее на твою DLL он создает lib-файл и показывает список экспортируемых функция (возможно, надо с опциями/ключами поиграться, чтобы получить этот список).

Если Microsoft, то запускаешь "Dependensy Walker":
Или через Пуск->Программы->Microsoft Visual Studio->Microsoft Visual Studio Tools->Depends
Или находишь как
{Microsoft Visual Studio Folder}\Common\Tools\DEPENDS.EXE
{Microsoft Visual Studio Folder} - это каталог, куда установлена "Студия".

Затем File-> Open - Открываешь твою DLL, и в одном из окошек (как бы сказать каком... наверное так: "в правом, а по веритикали - в среднем" :) ) будет тебе список экспортируемых DLL-ю функций. В столбике с заголовком Function - как раз имена.


В принципе, в GetProcAddress можно передавать не обязательно имя функции, можно ее "номер". Вот что MSDN пишет (выделено мной):
FARPROC GetProcAddress(
HMODULE hModule, // handle to DLL module
LPCSTR lpProcName // function name
);
lpProcName
[in] Pointer to a null-terminated string containing the function or variable name, or the function's ordinal value. If this parameter is an ordinal value, it must be in the low-order word; the high-order word must be zero.
И если в твоей DLL-и, например, проэкспортирована лишь одна функция, то , возможно, пройдет вызов с "номером" 1.

Кстати, "Dependensy Walker" показывает, как я понимаю и этот самый ordinal value. Во всяком случае, колонка с загловком Ordinal^ там имеется.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

В любом случае, ты не сможешь воспользоваться библиотечной функцией, не зная её синтаксиса. Если это какая-нибудь системная библиотека, то можно найти по ней документацию в MSDN или в интернете.
Ответить