Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Shurentij
Зарегистрирован: 27.09.2005 Сообщения: 19
|
Добавлено: Вт Сен 27 2005 10:11 Заголовок сообщения: Взаимодействие двух приложений |
|
|
Здравствуйте товарищи програмисты-профессионалы!
Стоит такая задача:
Существует одна программа написанная на Delphi и вторая написаная на С++ (есть все исходные коды). Из первой программы должна вызываться вторая и передавать ей стороку (указатель на область памати) с данными для обработки. Передача через файл на диске не подходит. Вторая программа считывает их, выполняет необходимые действия и возвращает результат первой.
Как это организовать? Сам никогда с такими задачами не сталкивался. Кто-то мне говорил, что надо использовать стандартные потоки ввода-вывода, но я не знаю как этим пользоваться, а в литературе, что есть у меня об этом не написано.
Буду благодарен за помощь и если можно привести исходный текст для такого взаимодействия как для первой программы, так и для второй. |
|
Вернуться к началу |
|
|
DmitryShm
Зарегистрирован: 17.11.2003 Сообщения: 211 Откуда: Казань
|
Добавлено: Вт Сен 27 2005 11:21 Заголовок сообщения: |
|
|
В MSDN почитай про Interprocess Communication. Станет легче. Если хочешь, могу книжку Рихтера по Win32 кинуть. _________________ love IT |
|
Вернуться к началу |
|
|
Dimasm
Зарегистрирован: 25.04.2005 Сообщения: 454
|
Добавлено: Вт Сен 27 2005 13:31 Заголовок сообщения: |
|
|
кажется это можно сделать через DDE - можно прямо данные гнать
или сообщение послать, с сылкой на указатель,
или извратиться и передать через буффер |
|
Вернуться к началу |
|
|
Shurentij
Зарегистрирован: 27.09.2005 Сообщения: 19
|
Добавлено: Ср Сен 28 2005 07:37 Заголовок сообщения: |
|
|
Темы вроде DDE и IPC мне не понятны. Я читал что через сообщения тут послать не получится так как это разные программы (exe-шники).
Если можно эти темы по подробнее объясните.
Я бы хотел, что-то вроде этого http://os2.in.ru/rdm2/articles/dupstd.html, но для Windows.
т.е. вызвать system(program2.exe) и перенаправив потоки отправить туда данные.
Может я иду не по тому пути? Если так то предложите мне что-то более правильное и материал, где можно с этим подробней разобраться.
Спасибо. |
|
Вернуться к началу |
|
|
DmitryShm
Зарегистрирован: 17.11.2003 Сообщения: 211 Откуда: Казань
|
Добавлено: Ср Сен 28 2005 08:25 Заголовок сообщения: DDE |
|
|
DDE устарело => не использовать в новых программах. См. MSDN. Придется использовать IPC или писать изврат. Дело в том, что если программируешь под Windows, то и используешь идеологию Windows и мощь Windows. То, что не использует это, либо должно быть настолько гениальным, чтобы тягаться со средствами операционной системы, либо быть мастдаем. Скажи, хотя бы, что используешь для разработки, а то я, может, пользуюсь не тем предметным словарем? Могу тебя одарить книжкой Джеффри Рихтера про Win32. _________________ love IT |
|
Вернуться к началу |
|
|
Dimasm
Зарегистрирован: 25.04.2005 Сообщения: 454
|
Добавлено: Ср Сен 28 2005 08:52 Заголовок сообщения: |
|
|
Как я понял из того примера, во-первых оба приложения должны быть консольными. По умолчанию, стандартный поток ввода вывода консольных приложений - это консоль cmd
всё это перенаправляется на PipeWriteHandle и для одной и для другой. Потом одна прога запускает другую. Когда в первой пишешь
cout<< "Hello world";
во второй можно принять
char str;
cin>>str;
и наоборот
если у тебя проги консольные, то это в принципе вариант. Осталось найти как это сделать с помощью стандартной iostream.h
Думаю это будет почти аналогично как для ОS/2.
Надеюсь ничего не напутал
Это потребует дороботки обоих программ.
Рас у тебя есть исходники, почему бы тебе не оформить одну из прог ка dll библиотеку. Импортировать во вторую нужную функцию и, мне кажется, всё будет гараздо проще. |
|
Вернуться к началу |
|
|
Shurentij
Зарегистрирован: 27.09.2005 Сообщения: 19
|
Добавлено: Пт Сен 30 2005 07:06 Заголовок сообщения: |
|
|
Первую программу пишу не я. Нужно только дать указания по передачи данных. Вторую пишу я, в Borland C++ Bilder'е 6.0. Функции второй программы - шифровать данные. Обеспечить это можно используя только язык С (требования для криптобиблиотек которые встраиваются во вторую программу).
Как проще будет организовать взаимодействие: dll или IPC.
Как сформировать dll из С++ программы? |
|
Вернуться к началу |
|
|
Dimasm
Зарегистрирован: 25.04.2005 Сообщения: 454
|
Добавлено: Пт Сен 30 2005 08:25 Заголовок сообщения: |
|
|
Shurentij писал(а): |
Как сформировать dll из С++ программы? |
Кинь мыло в личку, вышлю файлки, может поможет |
|
Вернуться к началу |
|
|
younghacker
Зарегистрирован: 08.10.2005 Сообщения: 10
|
Добавлено: Сб Окт 08 2005 01:17 Заголовок сообщения: Re: Взаимодействие двух приложений |
|
|
Shurentij писал(а): | Передача через файл на диске не подходит. |
А FileMaping подходит? Это совместная дырка в памяти через которую могут общаться разные процессы. Одно пишет в нее, другое оттуда же читает. И наоборот. А синхронизировать процесс, при потребности быстро реагировать, можно сообщениями.
Почитайте про функции CreateFileMapping MapViewOfFile UnMapViewOfFile
Где-то в нете была даже статейка про их использование и на русском в том числе, у меня возможно где-то она осталась... А примеры на дельфи так точно есть.
Последний раз редактировалось: younghacker (Пн Окт 10 2005 19:14), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
shaman2k5
Зарегистрирован: 30.07.2005 Сообщения: 43 Откуда: Да недалече я... 8)
|
Добавлено: Сб Окт 08 2005 05:55 Заголовок сообщения: |
|
|
Твоя прога д.б. DLL, ИМХО самый рулез.
И она должна экспортировать несколько функций с параметрами
где эти параметры и есть данные для первой проги.
про консоль - вряд ли. _________________ -Пойду, прибью винду.. |
|
Вернуться к началу |
|
|
younghacker
Зарегистрирован: 08.10.2005 Сообщения: 10
|
Добавлено: Сб Окт 08 2005 18:25 Заголовок сообщения: |
|
|
shaman2k5 писал(а): | И она должна экспортировать несколько функций с параметрами где эти параметры и есть данные для первой проги. |
Вы как-то непонятно объяснились. Кто чем чего куда.
Извините, а как Вы из dll одного процесса покажете данные фактически этой же dll но другого процесса? Вы поптобуйте запустить одну и ту же программу использующую одну и ту же DLL. Вы устройство памяти в винде когда нибудь изучали? Адресные пространства разных процессов в винде полнотью изолированы! И каждому выделено по 4 Гига. Прикольно да?
Другое дело если в DLL будет экспортирована вся требуемая логика работы второго приложения... Но это уже будет приложение в приложении. |
|
Вернуться к началу |
|
|
shaman2k5
Зарегистрирован: 30.07.2005 Сообщения: 43 Откуда: Да недалече я... 8)
|
Добавлено: Вс Окт 09 2005 09:29 Заголовок сообщения: re |
|
|
Тот кому нужно тот поймет
2yanghaсker -
очень просто если человек писал dll он поймет каак
и не надо мне тут читать нотации
вы сами батенька скоко стоящих прог написали? _________________ -Пойду, прибью винду.. |
|
Вернуться к началу |
|
|
shaman2k5
Зарегистрирован: 30.07.2005 Сообщения: 43 Откуда: Да недалече я... 8)
|
Добавлено: Вс Окт 09 2005 09:30 Заголовок сообщения: re |
|
|
Тот кому нужно тот поймет
2yanghaсker -
очень просто если человек писал dll под конкретный софт
он поймет каак
и не надо мне тут читать нотации
вы сами батенька скоко стоящих прог написали?
.. |
|
Вернуться к началу |
|
|
younghacker
Зарегистрирован: 08.10.2005 Сообщения: 10
|
Добавлено: Вс Окт 09 2005 12:48 Заголовок сообщения: |
|
|
OFF:
Прошу прощения, а чего это Вы так разгорячились? Два дубля одного поста. Во-первых, я не читал Вам нотаций, а вежливо переспросил. Во-вторых, совершенно не считаю уместным меряться регалиями или у кого PCюк круче. В зависимости от ударения в слове стОящИх, можно подразумевать разный смысл.
Конференция читается не одним человеком, и чтобы Вас правильно поняли, нужно пытаться однозначно корректно излагать свои мысли. Человек задал вопрос, чтобы получить возможные варианты решения своей задачи. А Вы тут разборки устраиваете. |
|
Вернуться к началу |
|
|
kolobok0
Зарегистрирован: 22.04.2005 Сообщения: 253 Откуда: Мсква
|
Добавлено: Пн Окт 10 2005 12:07 Заголовок сообщения: без проблем... |
|
|
younghacker писал(а): | .....Вы поптобуйте запустить одну и ту же программу использующую одну и ту же DLL. ........Адресные пространства разных процессов в винде полнотью изолированы!.......... |
уже на сегодняшний день существует опыт проги трассировщика, который показывает энное кол-во сообщений из энного кол-ва ПРОЦЕССОВ. Сей механизм опираеться ИМЕННО на вышеуказанный подход (см. рихтера). Одна дэ-ле-ле имеет шарет мемори и без проблем передаёт инфу из многих экзешников в один - тот который отображает всю эту байду на консоле (ну почти).
плюс - не обязательность связывания и скорость передачи...
минус - по мелочам , я бы сказал...
с уважением
(круглый) _________________ (круглый) |
|
Вернуться к началу |
|
|
younghacker
Зарегистрирован: 08.10.2005 Сообщения: 10
|
Добавлено: Пн Окт 10 2005 19:12 Заголовок сообщения: Re: без проблем... |
|
|
kolobok0 писал(а): | Одна дэ-ле-ле имеет шарет мемори и без проблем передаёт инфу из многих экзешников .... |
Но ведь, если я не ошибаюсь, это и есть memory-mapped files о котором я говорил выше.
Более того, рекомендую автору вопроса скормить поисковикам "Обмен данными между процессами" что-бы увидеть массу информации о том, как это использовать. А от себя могу предложить несколько статей на эту тему, когда-то давно выловленных из инета (источники к сожалению уже "умерли"), а также примеры на C и на Delphi.
Если интересует, то пишите в личку. Поскольку давно уже я не являюсь постоянным обитателем здешнего форума. Когда-то тут все было по-другому.
Удачи. |
|
Вернуться к началу |
|
|
yokogama
Зарегистрирован: 21.10.2005 Сообщения: 5
|
Добавлено: Пт Окт 21 2005 17:36 Заголовок сообщения: |
|
|
Гспода, Как Delfi так и C++ имеют возможность делать ассемблерные вставки. А как известно asm__ имеет замечательную способность индексировать области памяти, например
С++ :
int a;
asm_
{
mov eax, a; //передать в математический регистр значение параметра «а»
mov ebx:edx, &a; // передать в адресный регистр указатель параметра «а»
} _________________ www.grand-casino.ru www.grandcasino.ru |
|
Вернуться к началу |
|
|
younghacker
Зарегистрирован: 08.10.2005 Сообщения: 10
|
Добавлено: Пт Окт 21 2005 17:59 Заголовок сообщения: |
|
|
Я бы сказал, это прекрасно умеют и C и Delphi и другие языки высокого уровня Я имею ввиду, умеют даже без использования инлайн ассемблера в коде. Указатель на область памяти и пляши от него. Только какое это имеет отношение к вопросу обмена данными между процессами? |
|
Вернуться к началу |
|
|
yokogama
Зарегистрирован: 21.10.2005 Сообщения: 5
|
Добавлено: Ср Окт 26 2005 10:32 Заголовок сообщения: |
|
|
Во-первых, ASM быстрее работает.
А для облегчения (для тех, кто не знает ASM) можно применить библиотеку DLL _________________ www.grand-casino.ru www.grandcasino.ru |
|
Вернуться к началу |
|
|
younghacker
Зарегистрирован: 08.10.2005 Сообщения: 10
|
Добавлено: Ср Окт 26 2005 11:11 Заголовок сообщения: |
|
|
yokogama писал(а): | Во-первых, ASM быстрее работает.
|
Ну вы, блин, даете! (с)
Как человек писавший на асме довольно долго и продолжающий пописывать на нем, могу сказать что на асме стоит писать только критические участки кода. Многие оптимизаторы "знают" асм намного лучше среднестатистического писателя на асме. И знают совершенно точно до тактовых мелочей и длинне кода каждого процессора. Можете написать кусок своего кода на асме и на языке высокого уровня и посмотреть в чем разница. Но не будем об этом спорить. Кто пишет тот и решает.
Я спросил какое непосредственное отношение имеет ASM к обмену данными между процессами в Windows? Ответ - никакого. |
|
Вернуться к началу |
|
|
kolobok0
Зарегистрирован: 22.04.2005 Сообщения: 253 Откуда: Мсква
|
Добавлено: Ср Окт 26 2005 13:40 Заголовок сообщения: Чудны твои дела о'господи ! |
|
|
younghacker писал(а): | .........Я спросил какое непосредственное отношение имеет ASM к обмену данными между процессами в Windows? Ответ - никакого. |
ну вот...обломали человека...
хотя мона было для начала узнать какой азм он имеет ввиду... Вдруг 51 или авр к примеру - чем чёрт не шутит, вдруг влияет ?
а то челдобрек так круто пишет бесконечные циклы на азме, которые оканчиваються за 5 минут !
лано...сорьки...рассмешил... человечик...
с уважением
(круглый) |
|
Вернуться к началу |
|
|
yokogama
Зарегистрирован: 21.10.2005 Сообщения: 5
|
Добавлено: Ср Окт 26 2005 15:10 Заголовок сообщения: |
|
|
Я имел введу ASM встроенный в язык, тем кто не знает что это такое, просба не отвечать на данное сообщение. _________________ www.grand-casino.ru www.grandcasino.ru |
|
Вернуться к началу |
|
|
younghacker
Зарегистрирован: 08.10.2005 Сообщения: 10
|
Добавлено: Ср Окт 26 2005 16:16 Заголовок сообщения: |
|
|
yokogama писал(а): | Я имел введу ASM встроенный в язык, тем кто не знает что это такое, просба не отвечать на данное сообщение. |
Не стоит считать что Ваши оппоненты ни сном ни духом о тех низкоуровневых материях кои Вы зычно называете "встроенным языком". Боюсь Вы еще не осознали где прокололись.
Ни ASM, ни C ни Pascal, и иже с ними никаким боком не касаются вопроса взаимодействия процессов, потому, что это сфера влияния операционной системы. Разумеется речь не идет о MSDOS на процессоре Intel 80x86 и аналогичных. Любая процессорная инструкция, даже написанная прямо в двоичном редакторе и сохраненная на диск, и каким-то образом запущенная, будет выполена процессором в изолированном от других процессов адресном пространстве. ИЗОЛИРОВАННОМ. Но с оговоркой, если для этого не попросить операционную систему сделать окошко в памяти, в которое смогут смотреть другие приложения... И язык тут ни к селу ни к городу. Тут стоит API операционной системы.
Как кто-то сказал - "Учите матчасть". |
|
Вернуться к началу |
|
|
yokogama
Зарегистрирован: 21.10.2005 Сообщения: 5
|
Добавлено: Ср Ноя 02 2005 11:49 Заголовок сообщения: |
|
|
Да, самое главное, это решить вопрос передачи данных через оперативку.
Предлогая ASm, я осознано понимаю, что "Кусок кода" написаный на нём, будет быстрее и проще в написании чем другие способы, такие как dll библиотеки и тому подобное. _________________ www.grand-casino.ru www.grandcasino.ru |
|
Вернуться к началу |
|
|
kolobok0
Зарегистрирован: 22.04.2005 Сообщения: 253 Откуда: Мсква
|
Добавлено: Ср Ноя 02 2005 12:34 Заголовок сообщения: матчасть...учить...смотреть...изучать...(+) |
|
|
yokogama писал(а): | ......это решить вопрос передачи данных через оперативку.Предлогая ASm, я осознано понимаю, что "Кусок кода" написаный на нём, будет быстрее и проще в написании чем другие способы, такие как dll библиотеки и тому подобное. |
я правильно понимаю...
Вы предлагаете вставить в программу "A" кусочек кода на азме, который пишет по адресу 0000435Dh (к примеру). И по этому же адресу читать из программы "B" ?
Тогда вопрос... Что Вы слышали...даже не так... Слышали ли Вы о ДОМЕННОЙ защите ? О, КОЛЬЦЕВОЙ защите ? В ДАННОЙ, КОНКРЕТНОЙ операционке WIN32 ?
Предлогаю Вам написать такие программки (без колдовства над секьюрити и в третьем кольце) и показать исходники прям на данном форуме. Думаю, все поучаться - как нуна решать подобные задачи
молодой человек - не порите чушь. читайте Рихтера. Там написано чёрным по белому про ПРАВИЛА доступа к ресурсам ПРОЦЕССА, в том числе и к ОЗУ. И совсем похрену на каком языке Вы писали свои потуги (или Вы подразумеваете, что микропроцессор смотрит бинарник - обана это Си...не..работать не буду.. А ! а вот азм - пойдука я прочитаю)... Так вот без влазанья в LTD или даже GTD, на 3 уровне - Вы сей фокус думаю хрен сделаете...
по поводу быстрее на азме (работать имееться ввиду) - тут Вы америки не открыли. В конечном итоге ВСЕ языки превращаються в машинные инструкции, которые мона выразить в азме.
просче в написании - кхм... как Вам сказать, не всегда... рекомендую сделать на азме - функцию вычисления синуса к примеру... когда Вы будете штудировать литературу по мат возможностям проца, любой сишник с закрытыми глазами напишет Вам всего одну строчку...
с другой стороны...
на сях (на более верхних языках - ситуация ышо хуже) рисовать под 89с2051 к примеру - мона...но могёт не хватить флэша А вот на азме мона много функционала упаковать...Да и по скорости на данном кристале будет 1/12 от тактовой... у АВР к примеру 1/1 от тактовой (как и у x86 серии)... каждая команда - что можно использовать при оптимизации по скорости.
кстати если Вы начали с азма своё путешествие по стране программирования, то рекомендую написать свой вирус. ОЧЕНЬ МНОГОЕ проясниться у Вас в голове. И на мой взгляд опыта у Вас станет ГОРАЗДО больше. Потому что придёться решать такие задачи: как оптимизация по скорости, находить такие последовательности команд на азме - при которых КАЖДАЯ команда будет нести 3 и более уровня вложенности по смыслу, оптимизация по размеру, анализ возможностей и нюансов OS, нахождение ядра системы, обход антивирусных анализаторов, обход дебагинга. Можно писать много - это целый большой раздел в программировании (на мой взгляд). Да, сразу оговорюсь... Писать вирусы - это творчество, а вот распространять - это делают убогие уоды... тут приведу цитату Лозинского (кажеться) "помните - пользователь перед Вами беззащитен!"
удачи Вам
(круглый) |
|
Вернуться к началу |
|
|
younghacker
Зарегистрирован: 08.10.2005 Сообщения: 10
|
Добавлено: Ср Ноя 02 2005 13:16 Заголовок сообщения: |
|
|
yokogama писал(а): | Предлогая ASm, я осознано понимаю, что "Кусок кода" написаный на нём, будет быстрее и проще в написании чем другие способы, такие как dll библиотеки и тому подобное. |
Прислушайтесь, что Вам говорят оппоненты. И отклоняясь от предмета дискуссии еще добавлю, чтобы Вы кроме АСМ-а и Си учили также и русский язык. Как орфографию, так и стилистику. Значения слов изучайте по толковым словарям. Там много интересного. А затем и английский легче пойдет и АСМ. Мелочей не бывает. Все важно. Языки они все одинаковые в основе. Только если за ошибку в мнемонике АСМ-а Вас предупредит компилятор, то по культуре вашей речи и ведения диалога особенно на серьезном уровне Вас никто одергивать не станет, а молча сделают заключение о Вас и о вашей компетенции.
В общем учитесь, и прислушивайтесь к тому, что Вам говорят.
Прошу не обижаться. Я сам где-то был таким. |
|
Вернуться к началу |
|
|
DmitryShm
Зарегистрирован: 17.11.2003 Сообщения: 211 Откуда: Казань
|
Добавлено: Ср Ноя 02 2005 13:47 Заголовок сообщения: мля |
|
|
Мля, запарили эту тему мусолить словоблуды хреновы. Вам уже 100 раз ответили. Еще раз убеждаюсь, что на этом форуме хороших профи очень мало. _________________ love IT |
|
Вернуться к началу |
|
|
younghacker
Зарегистрирован: 08.10.2005 Сообщения: 10
|
Добавлено: Ср Ноя 02 2005 13:56 Заголовок сообщения: Re: мля |
|
|
DmitryShm писал(а): | Еще раз убеждаюсь, что на этом форуме хороших профи очень мало. |
И будет еще меньше. Особено после таких высказываний.
* Перестать следить за темой *
* Ушел работать * |
|
Вернуться к началу |
|
|
yokogama
Зарегистрирован: 21.10.2005 Сообщения: 5
|
|
Вернуться к началу |
|
|
DmitryShm
Зарегистрирован: 17.11.2003 Сообщения: 211 Откуда: Казань
|
Добавлено: Вс Ноя 13 2005 22:15 Заголовок сообщения: |
|
|
Доки надо, нах, читать, а не "диалоги вести" . Сорри на мой французский, но такие диалоги о вопросах элементарных к повышению посещаемости этого форума хорошими русскоязычными профи не приводит. Этот форум превращается в полное дерьмо. _________________ love IT |
|
Вернуться к началу |
|
|
|