Получение информации используя файл DLL
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Доброе время суток!
Вопрос возможно слишком сложен, и не для форума (при всем моем уважении к форуму и участникам форума). Но, тем не менее, хочется рассчитывать на помощь … задача в следующем:
Например, в EditBox диалогового окна вводится предложение: «Сколько стоит USB-IrDA?». Затем подгружается dll’ка и используя ее выводится ответ в текстовой файл (находящийся в папке этого проекта), к примеру «USB-IrDA стоит 400р».
Если можно с исходниками! Работаю в Visual C++ 6.0.
С уважением, Den!
Вопрос возможно слишком сложен, и не для форума (при всем моем уважении к форуму и участникам форума). Но, тем не менее, хочется рассчитывать на помощь … задача в следующем:
Например, в EditBox диалогового окна вводится предложение: «Сколько стоит USB-IrDA?». Затем подгружается dll’ка и используя ее выводится ответ в текстовой файл (находящийся в папке этого проекта), к примеру «USB-IrDA стоит 400р».
Если можно с исходниками! Работаю в Visual C++ 6.0.
С уважением, Den!
-
- Сообщения: 38
- Зарегистрирован: 21 июн 2004, 02:59
- Откуда: Saratov
- Контактная информация:
Непонятно, что тебе конкретно-то надо? Как создавать и подгружать DLL? Как работать с файлами? Или что?
"Разруха не в клозетах, а в головах." (c) Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
Спасибо за попытку помочь!
DLL уже создана. Как подгрузить ее? О том, что необходимо уже писал.
DLL уже создана. Как подгрузить ее? О том, что необходимо уже писал.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
LoadLibrary, GetProcAddress.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Можно ли как-то узнать название ф-ии в dll'ке, которая нужна?
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Вопрос не понятен. Кто кому нужен?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Название-то экспортируемых DLL-ю функций узнать довольно легко (любой libmaker или микрософтовский Dependensy Walker это все показывает). Сложнее - с набором параметров этих функций...
Загружается dll с помощью LoadLibrary (все нормально). Далее в GetProcAddress я должен использовать ф-ию (из dll) которая передает информацию в программу. Название это ф-ции не знаю. Когда ставилась задача предпологалось, что это будет в документации, фиг там.
ВВВ писал, что это довольно легко. Можно поподробней. Что касается параметров, то он один с типом CString.
ВВВ писал, что это довольно легко. Можно поподробней. Что касается параметров, то он один с типом CString.
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 пишет (выделено мной):
Кстати, "Dependensy Walker" показывает, как я понимаю и этот самый ordinal value. Во всяком случае, колонка с загловком Ordinal^ там имеется.
"Натравливаешь" ее на твою 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, и в одном из окошек (как бы сказать каком... наверное так: "в правом, а по веритикали - в среднем"

В принципе, в GetProcAddress можно передавать не обязательно имя функции, можно ее "номер". Вот что MSDN пишет (выделено мной):
И если в твоей DLL-и, например, проэкспортирована лишь одна функция, то , возможно, пройдет вызов с "номером" 1.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.
Кстати, "Dependensy Walker" показывает, как я понимаю и этот самый ordinal value. Во всяком случае, колонка с загловком Ordinal^ там имеется.
В любом случае, ты не сможешь воспользоваться библиотечной функцией, не зная её синтаксиса. Если это какая-нибудь системная библиотека, то можно найти по ней документацию в MSDN или в интернете.