Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2010, 10:42   #1
waryg
Новичок
Джуниор
 
Регистрация: 06.04.2010
Сообщений: 3
По умолчанию проблемы с GetProcAddress

Код:
h:=findwindow(nil,'Project1');
new(procidz);
pr:=procidz;
getwindowthreadprocessid(h,pr);
procid:=procidz^;
dispose(procidz);
hprocess:=openprocess(process_all_access,true,procid);
z:=getlasterror;
if z<> 0 then
showmessage('openprocess failed: '+syserrormessage(z));
showmessage('processid = '+inttostr(hprocess));
pll:=GetProcAddress(GetModuleHandle('Project1.exe'),'TForm1.ExecApp');
z:=getlasterror;
if z<> 0 then
showmessage('Ошибка: '+syserrormessage(z));
Вот фрагмент кода, который должен выхватывать адрес процедуры. Только начал разбираться с этим, поэтому тестирую файл на сам себе (Project1 запускает сам себя), все открывается, но в конце выходит ошибка : указанная процедура не найдена, хотя такая процедура там есть. Пробовал по разному писать ничего не выходит. Не знаю, стоит ли остальной код приводить, там вроде все как надо.
waryg вне форума Ответить с цитированием
Старый 06.04.2010, 10:56   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Смотри внимательно:
Цитата:
The GetProcAddress function returns the address of the specified exported dynamic-link library (DLL) function.
А у тебя эта процедура - метод. Понятно что он ее не находит, она то на экспорт не обьявлена.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.04.2010, 11:08   #3
waryg
Новичок
Джуниор
 
Регистрация: 06.04.2010
Сообщений: 3
По умолчанию

Тогда, что делать если мне надо вызвать событие в сторонней уже готовой программе, эту программу редачить и перекомпилировать нельзя (по крайней мере не стоит), но мне известно имя необходимой мне процедуры? Вряд ли она там стоит на экспорт. Есть ли возможность как-то таки эту процедуру вызвать?
waryg вне форума Ответить с цитированием
Старый 06.04.2010, 11:25   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну в целом можно просто узнать в отладчике адрес этой процедуры, вполне возможно что загрузчик ее будет грузить по одному и тому же адресу, и собственно из другой программы пытаться по этому адресу из чужого процесса вызвать что-то, только это ИМХО геморройно, да и не стабильно.
Ты лучше опиши ситуацию подробнее зачем именно так, может быть другие пути есть попроще.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.04.2010, 11:30   #5
waryg
Новичок
Джуниор
 
Регистрация: 06.04.2010
Сообщений: 3
По умолчанию

Есть программа довольно большая и сложная, исходных кодов у меня нет, но знаю что на делфе. Она шлет запрос в базу данных либо по таймеру (примерно раз в минуту - две), либо по требованию. Нужно написать отдельный скрипт, который принудительно бы отправлял этот запрос (нужна практически секундная точность) по конкретному макросу.Я ее дизассемблировал, вроде функцию отвечающую за посылку запроса нашел, знаю ее имя и RVA - адрес.
waryg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы со службой! Basketman Общие вопросы Delphi 1 11.09.2009 16:31
Проблемы с рендомизацией си dampirik Помощь студентам 6 05.09.2009 01:15
проблемы с IE xakzona Помощь студентам 1 16.12.2008 21:53
Проблемы с иконкой. Droid HTML и CSS 1 14.11.2008 08:13
Проблемы с WIN+D Altera Общие вопросы Delphi 4 15.08.2008 15:55