Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Указатель на функцию..

323
28 июля 2004 года
Sergun
228 / / 20.09.2000
Доброго времени суток, многоуважаемые...
Если динамически подгрузить DLL, а потом из EXE передать в эту DLL указатель на функцию, и вызвать эту функцию... такая штука будет работать?
И какие тут возможны проблемы?
2.0K
28 июля 2004 года
Fazil6
126 / / 17.12.2003
Цитата:
Originally posted by Sergun
Доброго времени суток, многоуважаемые...
Если динамически подгрузить DLL, а потом из EXE передать в эту DLL указатель на функцию, и вызвать эту функцию... такая штука будет работать?
И какие тут возможны проблемы?



В принципе должно работать

2.0K
28 июля 2004 года
HardMix
78 / / 25.06.2003
Цитата:
Originally posted by Fazil6


В принципе должно работать


А теоритически нет :D Все дело в адресном пространстве. Насколько я помню длл имеет свое адресное пространство. Или нет? Если да, то работать не должно, т.к. указатель на функцию будет попадать в молоко :). Если нет, то работать может, но я уверен в первом варианте.

323
28 июля 2004 года
Sergun
228 / / 20.09.2000
Цитата:
Originally posted by HardMix

А теоритически нет :D Все дело в адресном пространстве. Насколько я помню длл имеет свое адресное пространство. Или нет? Если да, то работать не должно, т.к. указатель на функцию будет попадать в молоко :). Если нет, то работать может, но я уверен в первом варианте.



и если это так, то как это обойти?
по идее на асме так call дальний должен быть?..

3
28 июля 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by HardMix

А теоритически нет :D Все дело в адресном пространстве. Насколько я помню длл имеет свое адресное пространство. Или нет? Если да, то работать не должно, т.к. указатель на функцию будет попадать в молоко :). Если нет, то работать может, но я уверен в первом варианте.



Или НЕТ!

"Адресное пространство" - это единственное словосочетание, которое ты знаешь?
Ты его употребляешь где ни попадя...

Ты молодец, что не уверен в том, что говоришь, но зачем же тогда говорить?

Цитата:
Originally posted by Sergun

Доброго времени суток, многоуважаемые...
Если динамически подгрузить DLL, а потом из EXE передать в эту DLL указатель на функцию, и вызвать эту функцию... такая штука будет работать?
И какие тут возможны проблемы?


Такая штука работать будет. Даже больше того, ты можешь объявить некоторые методы в EXE, как __declspec(dllexport) и импортировать их в DLL, например, с помошью GetProcAddress.

Проблемы могут возникнуть в свзи с тем, что EXE и DLL (каждая) имеют свои менеджеры памяти, поэтому объекты созданные и память выделенная в одном модуле не должна удалятся в другом. При этом на использование этой области или объекта (как частный случай) ограничений не накладывается, т.е. можешь читать, писать свободно.

2.0K
29 июля 2004 года
Fazil6
126 / / 17.12.2003
Цитата:
Originally posted by HardMix

А теоритически нет :D Все дело в адресном пространстве. Насколько я помню длл имеет свое адресное пространство. Или нет? Если да, то работать не должно, т.к. указатель на функцию будет попадать в молоко :). Если нет, то работать может, но я уверен в первом варианте.




DLL имеет адресное пространство процесса, который ее вызвал

323
30 июля 2004 года
Sergun
228 / / 20.09.2000
Цитата:
Originally posted by Fazil6



DLL имеет адресное пространство процесса, который ее вызвал



т.е.....? :x

2.0K
30 июля 2004 года
Fazil6
126 / / 17.12.2003
Цитата:
Originally posted by Sergun


т.е.....? :x




что т.е....?

каждый процесс действительно имеет свое ад. пр. При загрузке dll использует ту же область ОЗУ, что и процесс, который ее вызвал.

Т.е. аргументы HardMix неправильны

2.0K
30 июля 2004 года
HardMix
78 / / 25.06.2003
Цитата:
Originally posted by Fazil6



что т.е....?

каждый процесс действительно имеет свое ад. пр. При загрузке dll использует ту же область ОЗУ, что и процесс, который ее вызвал.

Т.е. аргументы HardMix неправильны


Да, но это работает если мы вызываем CreateProcess, чего мы не делаем при подгрузке ДЛЛ.
2Green: А есть факты которые смогут доказать мою неправоту? :D Если есть - я изменю свое мнение. Но ты, имхо, сам до конца в моей неправоте не уверен. Я то в своей аргументации уверен, но уверять в этом других я не намерен. Пусть пробуют. А разных словосочетаний я знаю много: мокрые ежики, пушистая метла, зеленые глюки. Но их я использую по другим поводам :)

3
16 августа 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by HardMix

Да, но это работает если мы вызываем CreateProcess, чего мы не делаем при подгрузке ДЛЛ.


Этот бред я пропущу.

Цитата:
Originally posted by HardMix

2Green: А есть факты которые смогут доказать мою неправоту? :D Если есть - я изменю свое мнение.


Приготовился менять своё мнение? Поехали!
Ты когда-нибудь использовал DLL? Ну, например, Win32 API?
Возьмем к примеру функцию MessageBox. Второй и третий параметры в ней - указатели. Вопрос: какой смыл их передовать, если у DLL другое адресное пространство? :D

Читаем Рихтера:

Цитата:

Если процесс загружает DLL, то ее код проецируется в его адресное пространство и она (DLL) при этом теряет почти всю свою индивидуальность: для потоков код и данные DLL - просто дополнительный код и данные, оказавшиеся в адресном пространстве процесса. Когда поток вызывает из DLL какую-то функцию, та считывает свои параметры из стека потока и размещает в этом стеке собственные локальные переменные. Кроме того, любые созданные кодом DLL объекты принадлежат вызывающему потоку или процессу - DLL в Win32 ничем не владеет.



Цитата:
Originally posted by HardMix

Но ты, имхо, сам до конца в моей неправоте не уверен.


Я говорю то, в чем уверен.

Цитата:
Originally posted by HardMix

Я то в своей аргументации уверен, но уверять в этом других я не намерен.


А ты попробуй. Я свои доводы привел, дело за тобой.

2.0K
16 августа 2004 года
HardMix
78 / / 25.06.2003
Согласен, убедил :) Че т меня маленько не в ту сторону повело, прошу прощения если кого ввел в заблуждение :D
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог