|
|
|
Импорт функций из dll
|
|||
|---|---|---|---|
|
#18+
Привет всем! Есть вопрос относительно использования 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); Но вот тут проблема в том, что программа не знает заранее, что за тип будет у функции. Если имя функции я узнаю от пользователя, то с типом не получается. Неужели единственный вариант - это заставить пользователя и тип указывать? (и возвращаемого значения, и параметров) Есть способ лучше? Итак, моя задача( идеал:) ) - не ограничивать набор возможных функций. Надеюсь, понятно, объяснил проблему. Если нет, пишите - уточню, если что-то непонятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2005, 20:23 |
|
||
|
Импорт функций из dll
|
|||
|---|---|---|---|
|
#18+
Нууууу... можно попробовать объявлять функции с переменым набором параметров. Типа: Код: plaintext 1. 2. Второй вариант, объявить функцию без параметров вообще, а вызов ее делать через ассемблерный кусок. Сначала вручную кладешь на стек параметры потом зовешь функцию. В конце сам же чистишь стек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2005, 21:22 |
|
||
|
Импорт функций из dll
|
|||
|---|---|---|---|
|
#18+
На этапе компиляции тебе не удасться задать все возможные комбинации, так что выход единственный -- самому закидывать параметры в стек. Хочется только добавить, что задача очень неприятная. Что будет если пользователь ошибется хотя бы в одном параметре? это будет такое... К тому же придется определиться с размерами типов. К примеру, sizeof(int) = 2 или 4. Если тебе напишут func(int 88), сколько байтов ты будешь передавать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2005, 10:48 |
|
||
|
Импорт функций из dll
|
|||
|---|---|---|---|
|
#18+
Тогда еще вопрос. А можно ли как-то это сделать с помощью статического подключеня dll?.. Ведь при подключении lib файла программа получает ссылки на функции. Можно ли это как-нибудь использовать? То есть, скажем, сделать так, чтобы при подключении новой dll с новой функциональностью надо было перекомпилировать программу с указанием для линкера новой lib. То есть фиг с ним. Пусть нужна будет перекомпиляция. Главное, чтобы не надо было менять кода программы. Есть какое-то решение таким способом? Или обязательно в стек лезть придется? Честно сказать, у меня опыта на эту тему пока, мягко говоря, недостаточно. Я еще не делал ничего с ассемблерными вставками. Хотя в целом имею представление об ассме и его командах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2005, 11:13 |
|
||
|
Импорт функций из dll
|
|||
|---|---|---|---|
|
#18+
Может сделать в ДЛЛ функцию, которая должна выдавать число параметров для каждой функции в ДЛЛ, ну и при вызове учитывать это. Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2005, 11:15 |
|
||
|
Импорт функций из dll
|
|||
|---|---|---|---|
|
#18+
White OwlНууууу... можно попробовать объявлять функции с переменым набором параметров. Типа: Код: plaintext 1. 2. Второй вариант, объявить функцию без параметров вообще, а вызов ее делать через ассемблерный кусок. Сначала вручную кладешь на стек параметры потом зовешь функцию. В конце сам же чистишь стек. По поводу первого варианта. Вот объявил я такой указатель. Но при компиляции то я не знаю, сколько со сколькими параметрами буду ее вызывать. То есть будет if(paramNumber == 1) p(x1); else if(paramNumber == 2) P(x1,x2); И так далее? В принципе не так плохо. Тем более, параметров будет ну точно не больше 10. Но как быть с типами? Подбирать? Идея есть в принципе. Попробую сейчас. 2Карабас Желательно без таких функций все же. Даже очень желательно. Тем более что все же некоторые ограничения на число параметров, слава Богу, есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2005, 11:44 |
|
||
|
Импорт функций из dll
|
|||
|---|---|---|---|
|
#18+
TnedutS2Карабас Желательно без таких функций все же. Даже очень желательно. Тем более что все же некоторые ограничения на число параметров, слава Богу, есть. То есть можно перебрать. Похоже, параметров будет не больше 5. Ну с запасом (большим) - 10 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2005, 11:45 |
|
||
|
Импорт функций из dll
|
|||
|---|---|---|---|
|
#18+
Тебе в любом случае при вызове функции надо знать кол-во параметров, а чтобы его знать, надо чтобы кто-то сказал, например, эта самая дополнительная функция, которая пишется при разработке ДЛЛ Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2005, 11:51 |
|
||
|
Импорт функций из dll
|
|||
|---|---|---|---|
|
#18+
Карабас БарабасТебе в любом случае при вызове функции надо знать кол-во параметров, а чтобы его знать, надо чтобы кто-то сказал, например, эта самая дополнительная функция, которая пишется при разработке ДЛЛ Posted via ActualForum NNTP Server 1.2 Согласен. Но пользователь при вводе в консоль задает параметры какие-то. Я собираюсь их просто посчитать. А если он ошибся... Не повезло ему:) Вот с типами будет напряжнее. Хотя и решаемо. Надеюсь:) Пользователь должен знать параметры и их число, так как предполагается, что он dllку и делал или , по крайней мере, читал описание dllки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2005, 11:55 |
|
||
|
Импорт функций из dll
|
|||
|---|---|---|---|
|
#18+
TnedutSА если он ошибся... Не повезло ему:)В лучшем случае ... я если он умышленно ошибся ? Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2005, 11:58 |
|
||
|
Импорт функций из dll
|
|||
|---|---|---|---|
|
#18+
Карабас Барабас TnedutSА если он ошибся... Не повезло ему:)В лучшем случае ... я если он умышленно ошибся ? Posted via ActualForum NNTP Server 1.2 А для чего это ему может быть надо? Защита от дураков еще понятно, но от людей с мазохистским уклоном... Сейчас посмотрел. Ну при вызове не с теми параметрами программа просто некорректно заканчивает свою работу. Сойдет. Кстати, а можно это отлавливать try catch? Или нет? Я с этим ничего не делал еще тоже... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2005, 12:08 |
|
||
|
Импорт функций из dll
|
|||
|---|---|---|---|
|
#18+
первое впечатление - велосипед... Данной идеи 100 лет в обед и назвываеться COM. Рекомендую почитать про COM. Так и называеться книжка умная "Основы COM" там найдёте ответы на Ваши вопросы. Останеться только специфицировать интерфейс "описания". И вообще тогда пользователю не нуна будет указывать всю байду, типа наименований функций, кол-во параметров и их типизация. Интерфейс - есть СОГЛАШЕНИЕ между Вашей программкой и внешними ДэЛеЛе. удачи Вам (круглый) ЗЫ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2005, 15:32 |
|
||
|
Импорт функций из dll
|
|||
|---|---|---|---|
|
#18+
Есть еще вариент - передаешь в функцию строку а в ней уже все параметры. Каждый ДЛЛ будет знать как разгребать их. А возвращать можна форму, или что-то что может обобщить результат ... ну или же ту же строку ... в зависимости от задачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2005, 15:39 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33201062&tid=2032931]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
70ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 403ms |

| 0 / 0 |
