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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2012, 10:49   #1
Люцифер
 
Регистрация: 01.01.2010
Сообщений: 5
По умолчанию Обращения к переменным другой программы.

Добрый день.
Возможно мой вопрос очень глуп и уже осуждался... Но я не нашел решения проблемы... Вот в чем суть: есть программа написанная на С#, которая генерирует случайное, либо кому как нравиться, псевдо-случайное, большое, определяется числом бит, число. Как запустить программу из приложения Delphi 7 я знаю, в принципе, shellexecute с этим справляется, если я даже не ошибаюсь можно сделать так что бы программа запустилась в фоновом режиме. Но мне нужно узнать значение числа которое получилось на выходе программы. Я пробовал искать в сети но не чего не нашел... Использовать файл либо реестр и т.п. средства передачи числа не рассматривается... Переписать программу на Delphi тоже не вариант. Так вот может кто знает как получить значение переменной другой программы, или хотя бы подскажите как это назвать что бы поиск в сети принес больший результат.
Заранее спасибо.
Люцифер вне форума Ответить с цитированием
Старый 20.02.2012, 11:28   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Нельзя. 1 процесс не может влезть адресное пространство другой программы.
Хотя можно это при помощи CreateRemoteThread, но только если знаете, где искать.
Человек_Борща вне форума Ответить с цитированием
Старый 20.02.2012, 11:43   #3
Люцифер
 
Регистрация: 01.01.2010
Сообщений: 5
По умолчанию

Zloi Talib, прошу если вы такой умный подскажите как быть? А просто спамить не стоит...
Человек_Борща, я посмотрел функцию которую вы указали, в принципе суть ясна, но появился такой вопрос. При использование данной функции я так понимаю мы получаем общее пространство. То есть в свой программе я пишу функция которая получается общее адресное пространство для обеих программ, и я таким образом могу обратиться к нужной мне переменой по её имении и потом вернуть её значение в свою программу? Или я не правильно все понял? И вопрос после вызова функции я продолжаю с ней работать как обычным потоком?
Люцифер вне форума Ответить с цитированием
Старый 20.02.2012, 11:54   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
То есть в свой программе я пишу функция которая получается общее адресное пространство для обеих программ, и я таким образом могу обратиться к нужной мне переменой по её имении и потом вернуть её значение в свою программу? Или я не правильно все понял?
Это даже теоритечески не возможно т.к.
1. программы скомпилированы разными компиляторами
2. одна программа ничего не знает об устройстве другой.

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

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

Если программу на шарпе писали вы, то Memory Mapped Files могут решить проблему.
Если это чисто кудато выводится, его тоже можно получить.
Можно для программы создать dll в которой будет происходить генерация числа и функция получения уже сгенерированного числа, тогда CreateRemoteThread будет иметь смысл, т.к. вы сможете вызвать функцию из этой DLL в АП чужого процесса, и вернуть к себе результат.

Последний раз редактировалось Человек_Борща; 20.02.2012 в 12:07.
Человек_Борща вне форума Ответить с цитированием
Старый 20.02.2012, 12:09   #5
Люцифер
 
Регистрация: 01.01.2010
Сообщений: 5
По умолчанию

По поводу dll если я правильно понял мне проще запихнуть программу генерации числа в библиотеку и уже из Delphi работать не с исполняемой программой, а с библиотекой?
Люцифер вне форума Ответить с цитированием
Старый 20.02.2012, 12:17   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

В целом, да. Зависит от задачи.
Я предложил вам варианты.
Человек_Борща вне форума Ответить с цитированием
Старый 20.02.2012, 12:30   #7
Люцифер
 
Регистрация: 01.01.2010
Сообщений: 5
По умолчанию

И последний вопрос. Если я сделаю библиотеку, то я могу просто вызвать из нее функцию, которая мне нужна или все таки из-за того что языки разные прийдеться использовать CreateRemoteThread?
Люцифер вне форума Ответить с цитированием
Старый 20.02.2012, 12:43   #8
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Вам нужно переписать программу на c#, таким образом, чтобы вынести генерацию числа и функцию получения сгенерированного числа в DLL.
Ваша программа на delphi, создаёт RemoteThread который вызвает функцию получения уже готового числа, из этой dll в чужом адресном пространстве, и возвращает его вам.
Человек_Борща вне форума Ответить с цитированием
Старый 20.02.2012, 12:45   #9
Люцифер
 
Регистрация: 01.01.2010
Сообщений: 5
По умолчанию

Спасибо огромное, вы очень помогли.
Люцифер вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание программы для управления некоторыми функциями другой программы Юрий1991 Общие вопросы Delphi 6 03.02.2012 15:32
запуск программы из под другой программы fomikadze Общие вопросы C/C++ 8 13.06.2011 14:47
Копия программы на другой компьютер Ayubkhon Безопасность, Шифрование 5 15.06.2010 14:43
Вызов другой программы Anatoly555 Помощь студентам 1 18.03.2010 08:08
Запуск программы на выполнение из другой программы. ViNcHeStEr Паскаль, Turbo Pascal, PascalABC.NET 6 18.06.2008 14:33