powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Импорт функций из dll
13 сообщений из 13, страница 1 из 1
Импорт функций из dll
    #33200407
TnedutS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!
Есть вопрос относительно использования dll.

Чтобы использовать функции dll, надо (при динамическом варианте)

descr = LoadLibrary("libAdr");
funcPointer= (functype)GetProcAddress(descr,"funcName")

Но для этого всего надо совершенно точно знать, какие функции из библиотеки импортируешь. Их тип.

А нельзя ли использовать функции, о существовании которых не знал до этого?
То есть использовать совершенно левую библиотеку.

Ситуация такая.
Есть мой exe файл.
При его запуске выскакивает консоль, в которой можно какие-то команды писать и параметры для команд.
Есть команды, которые я сам писал и они жестко вбиты в код программы.
"Если написано x, делай y"

Надо сделать так, чтобы работать с dll, которые сам же динамически и подгружаешь. Это не проблема (LoadLibrary). У меня это выглядит - в консоли пишешь :
ld< xxx
и загружается нужная библиотека xxx.

Пользователь знает, что в dll, которую он только что загрузил, есть функция
typeFunc add (typex x,typey y,typez z)
Он в консоли пишет :
add xx,yy,zz

Я считываю это, анализирую и должен написать по идее :
p = (typeFunc(*)(typex)(typey)(typez))getprocaddress(descr,"add")
И вызывать функцию через указатель p:
(*p)(xx,yy,zz);
Но вот тут проблема в том, что программа не знает заранее, что за тип будет у функции.
Если имя функции я узнаю от пользователя, то с типом не получается.
Неужели единственный вариант - это заставить пользователя и тип указывать?
(и возвращаемого значения, и параметров)

Есть способ лучше?
Итак, моя задача( идеал:) ) - не ограничивать набор возможных функций.

Надеюсь, понятно, объяснил проблему. Если нет, пишите - уточню, если что-то непонятно.
...
Рейтинг: 0 / 0
Импорт функций из dll
    #33200447
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нууууу... можно попробовать объявлять функции с переменым набором параметров. Типа:
Код: plaintext
1.
2.
typedef void (imported_function)(...);
imported_function p = (imported_function)GetProcAddress(descr,"funcName");
p(i1, i2, i3);

Второй вариант, объявить функцию без параметров вообще, а вызов ее делать через ассемблерный кусок. Сначала вручную кладешь на стек параметры потом зовешь функцию. В конце сам же чистишь стек.
...
Рейтинг: 0 / 0
Импорт функций из dll
    #33200976
SeraTJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На этапе компиляции тебе не удасться задать все возможные комбинации, так что выход единственный -- самому закидывать параметры в стек.

Хочется только добавить, что задача очень неприятная. Что будет если пользователь ошибется хотя бы в одном параметре? это будет такое...
К тому же придется определиться с размерами типов. К примеру, sizeof(int) = 2 или 4. Если тебе напишут func(int 88), сколько байтов ты будешь передавать?
...
Рейтинг: 0 / 0
Импорт функций из dll
    #33201062
TnedutS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда еще вопрос.
А можно ли как-то это сделать с помощью статического подключеня dll?..

Ведь при подключении lib файла программа получает ссылки на функции.
Можно ли это как-нибудь использовать?

То есть, скажем, сделать так, чтобы при подключении новой dll с новой функциональностью надо было перекомпилировать программу с указанием для линкера новой lib.
То есть фиг с ним. Пусть нужна будет перекомпиляция.
Главное, чтобы не надо было менять кода программы.
Есть какое-то решение таким способом? Или обязательно в стек лезть придется?

Честно сказать, у меня опыта на эту тему пока, мягко говоря, недостаточно.
Я еще не делал ничего с ассемблерными вставками. Хотя в целом имею представление об ассме и его командах.
...
Рейтинг: 0 / 0
Импорт функций из dll
    #33201071
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может сделать в ДЛЛ функцию, которая должна выдавать число параметров для каждой функции в ДЛЛ, ну и при вызове учитывать это.
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Импорт функций из dll
    #33201184
TnedutS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlНууууу... можно попробовать объявлять функции с переменым набором параметров. Типа:
Код: plaintext
1.
2.
typedef void (imported_function)(...);
imported_function p = (imported_function)GetProcAddress(descr,"funcName");
p(i1, i2, i3);

Второй вариант, объявить функцию без параметров вообще, а вызов ее делать через ассемблерный кусок. Сначала вручную кладешь на стек параметры потом зовешь функцию. В конце сам же чистишь стек.


По поводу первого варианта.
Вот объявил я такой указатель.
Но при компиляции то я не знаю, сколько со сколькими параметрами буду ее вызывать.
То есть будет
if(paramNumber == 1)
p(x1);
else if(paramNumber == 2)
P(x1,x2);

И так далее?

В принципе не так плохо. Тем более, параметров будет ну точно не больше 10.

Но как быть с типами?
Подбирать? Идея есть в принципе. Попробую сейчас.

2Карабас
Желательно без таких функций все же. Даже очень желательно.
Тем более что все же некоторые ограничения на число параметров, слава Богу, есть.
...
Рейтинг: 0 / 0
Импорт функций из dll
    #33201192
TnedutS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TnedutS2Карабас
Желательно без таких функций все же. Даже очень желательно.
Тем более что все же некоторые ограничения на число параметров, слава Богу, есть.

То есть можно перебрать. Похоже, параметров будет не больше 5.
Ну с запасом (большим) - 10
...
Рейтинг: 0 / 0
Импорт функций из dll
    #33201224
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тебе в любом случае при вызове функции надо знать кол-во параметров, а чтобы его знать, надо чтобы кто-то сказал, например, эта самая дополнительная функция, которая пишется при разработке ДЛЛ
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Импорт функций из dll
    #33201243
TnedutS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас БарабасТебе в любом случае при вызове функции надо знать кол-во параметров, а чтобы его знать, надо чтобы кто-то сказал, например, эта самая дополнительная функция, которая пишется при разработке ДЛЛ
Posted via ActualForum NNTP Server 1.2

Согласен.
Но пользователь при вводе в консоль задает параметры какие-то. Я собираюсь их просто посчитать.
А если он ошибся...
Не повезло ему:)
Вот с типами будет напряжнее. Хотя и решаемо. Надеюсь:)

Пользователь должен знать параметры и их число, так как предполагается, что он dllку и делал или , по крайней мере, читал описание dllки.
...
Рейтинг: 0 / 0
Импорт функций из dll
    #33201267
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TnedutSА если он ошибся...
Не повезло ему:)В лучшем случае ... я если он умышленно ошибся ?
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Импорт функций из dll
    #33201318
TnedutS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас Барабас TnedutSА если он ошибся...
Не повезло ему:)В лучшем случае ... я если он умышленно ошибся ?
Posted via ActualForum NNTP Server 1.2

А для чего это ему может быть надо?
Защита от дураков еще понятно, но от людей с мазохистским уклоном...

Сейчас посмотрел. Ну при вызове не с теми параметрами программа просто некорректно заканчивает свою работу.
Сойдет.
Кстати, а можно это отлавливать try catch? Или нет?
Я с этим ничего не делал еще тоже...
...
Рейтинг: 0 / 0
Импорт функций из dll
    #33201979
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
первое впечатление - велосипед...
Данной идеи 100 лет в обед и назвываеться COM.
Рекомендую почитать про COM. Так и называеться книжка умная

"Основы COM"

там найдёте ответы на Ваши вопросы. Останеться только специфицировать интерфейс "описания". И вообще тогда пользователю не нуна будет указывать всю байду, типа наименований функций, кол-во параметров и их типизация.
Интерфейс - есть СОГЛАШЕНИЕ между Вашей программкой и внешними ДэЛеЛе.


удачи Вам
(круглый)
ЗЫ
...
Рейтинг: 0 / 0
Импорт функций из dll
    #33201997
Krolikoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть еще вариент - передаешь в функцию строку а в ней уже все параметры. Каждый ДЛЛ будет знать как разгребать их. А возвращать можна форму, или что-то что может обобщить результат ... ну или же ту же строку ... в зависимости от задачи
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Импорт функций из dll
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]