Уважаемые коллеги.
Поделитесь идеями, как реализовать такую штуку, как вызов произвольной процедуры из произвольной DLL.
Поясню:
DLL подгружаем функцией LoadLibrary
получаем адрес процедуры по имени: GetProcAddress(DLLInstance,ADDRESS(ProcName))
а вот дальше... возникает непонятка, как корректно эту процедуру/функцию вызвать?
заранее я не знаю, что это будет за функция, какие у нее параметры... эта информация известна только на этапе выполнения программы.
Если бы прототип был известен, то все просто. Но...
Заранее благодарю за ответ.
ЗЫ. Мне тут подсказывают, что может на ассемблере написать обвязку или на Си...
Вызов произвольной процедуры из произвольной DLL
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- StillZero
- Ветеран
- Сообщения: 458
- Зарегистрирован: 06 Июль 2005, 2:17
- Откуда: Хабаровск
- Поблагодарили: 1 раз
- Контактная информация:
Re: Вызов произвольной процедуры из произвольной DLL
полагаю, что вызвав неизвестно что, результат будет неизвестен 
потому, думаю, что прототип все таки известен, да и мало того, что надо знать прототип, так надо еще и что то передать, и желательно видимо не хуйню какую нибудь

потому, думаю, что прототип все таки известен, да и мало того, что надо знать прототип, так надо еще и что то передать, и желательно видимо не хуйню какую нибудь

по аэродрому...
Re: Вызов произвольной процедуры из произвольной DLL
СТОП!
Возможно я неточно выразился в предыдущем посте?
На момент написания программы прототипы неизвестны (вернее, их может быть конечное кличество, но очень большое)
А вот на момент выполнения программы конечно прототипы известны.
Так вот хочется (уже зная прототипы) в процессе выполнения программы вызывать эти процедуры.
Возможно я неточно выразился в предыдущем посте?
На момент написания программы прототипы неизвестны (вернее, их может быть конечное кличество, но очень большое)
А вот на момент выполнения программы конечно прототипы известны.
Так вот хочется (уже зная прототипы) в процессе выполнения программы вызывать эти процедуры.
- StillZero
- Ветеран
- Сообщения: 458
- Зарегистрирован: 06 Июль 2005, 2:17
- Откуда: Хабаровск
- Поблагодарили: 1 раз
- Контактная информация:
Re: Вызов произвольной процедуры из произвольной DLL
похоже на вот это:
Calling By Address, STARTing By Address, это ClaMag 2001, 11 месяц
http://clarionmag.com/cmag/v3/v3n11byaddress1.html
но имхо какое то неверное направление, допустим, что прототип MyReport(LONG inStoreID), т.е. процедура просит код склада, в твоей "вызывающей программе", вообще нет такого понятия как "код склада", т.е. ты не можешь вызвать эту процедуру... к чему я...? один черт, чтобы вызвать, надо знать что вызываешь
есть пара вариантов, когда это не важно, например MyBrowse(Params) и MyAdvancedBrowse(Params) или MyMoreCoolBrowse(Params), т.е. разные браузы, С ОДНИМ И ТЕМ ЖЕ набором параметров, либо, вызов процедуры вообще без параметров, но в этих случаях ты все равно ЗНАЕШЬ прототип, но не знаешь имя процедуры...
для поставки разным клиентам разных dll, головной модуль один черт знает что он хотел бы вызвать, а если этого нет, т.е. нет возможности загрузить, то, соответственно, лесом и дизаблим этот пункт меню
и... 100 прототипов не так уж и много
Calling By Address, STARTing By Address, это ClaMag 2001, 11 месяц
http://clarionmag.com/cmag/v3/v3n11byaddress1.html
но имхо какое то неверное направление, допустим, что прототип MyReport(LONG inStoreID), т.е. процедура просит код склада, в твоей "вызывающей программе", вообще нет такого понятия как "код склада", т.е. ты не можешь вызвать эту процедуру... к чему я...? один черт, чтобы вызвать, надо знать что вызываешь
есть пара вариантов, когда это не важно, например MyBrowse(Params) и MyAdvancedBrowse(Params) или MyMoreCoolBrowse(Params), т.е. разные браузы, С ОДНИМ И ТЕМ ЖЕ набором параметров, либо, вызов процедуры вообще без параметров, но в этих случаях ты все равно ЗНАЕШЬ прототип, но не знаешь имя процедуры...
для поставки разным клиентам разных dll, головной модуль один черт знает что он хотел бы вызвать, а если этого нет, т.е. нет возможности загрузить, то, соответственно, лесом и дизаблим этот пункт меню

и... 100 прототипов не так уж и много
по аэродрому...