Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.90/70: Рейтинг темы: голосов - 70, средняя оценка - 4.90
85 / 77 / 13
Регистрация: 03.09.2009
Сообщений: 346

Как передать информацию из одной программы в другую

10.09.2009, 14:39. Показов 14141. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Одна программа на С#, вторая на Delphi. Из первой во вторую нужно послать строку, после чего вторая программа должна ответить первой программе тоже строкой.

Какая технология это позволяет сделать наиболее просто?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.09.2009, 14:39
Ответы с готовыми решениями:

Как передать Dictionary с одной формы на другую?
Доброго времени суток товарищи! Что-то никак не разберусь как можно передать Dictionary с одной формы на другую? Есть у меня главная...

Как передать данные из одной формы в другую
нужно передать текст из richtextbox в новую форму,всё это при нажатии на кнопку. Не знаю.с чего даже начать

Как передать значения переменных из одной функции в другую
Есть функция: public string GetPostPosel(int posel, string token, CookieContainer cookies) { // Здесь я передаю...

20
 Аватар для DrMcSheen
62 / 63 / 3
Регистрация: 25.05.2009
Сообщений: 520
10.09.2009, 14:49
Через реестр.
Через буфер обмена.
Через файл подкачки.
Через гугль http://www.rsdn.ru/Archive/VC/issues/pvc036.htm
0
85 / 77 / 13
Регистрация: 03.09.2009
Сообщений: 346
10.09.2009, 15:21  [ТС]
Через реестр и файлы как-то некрасиво (предполагается редкий обмен короткими строковыми сообщениями).
За ссылку спасибо, буду что нибудь копать. Правда незнаю что именно мне нужно. Начну с WM_COPYDATA
0
Айхрень...
 Аватар для Paulie
306 / 176 / 7
Регистрация: 02.06.2009
Сообщений: 1,077
10.09.2009, 15:29
SergBokh, через сообщения окну. Процедуры точно не помню, по-моему SendMessage, там ещё различные процедуры есть, как PostMessage etc...

Добавлено через 44 секунды
Как вариант - через сокеты. WinSock или сокеты Беркли...
0
Комбайнёр
 Аватар для MAcK
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
10.09.2009, 16:09
Через сокеты правильнее
0
85 / 77 / 13
Регистрация: 03.09.2009
Сообщений: 346
10.09.2009, 17:56  [ТС]
через сокеты это ж вроде бы если нужно по сети обмениваться?
0
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
14.09.2009, 16:01
тут ничего не поделаешь. или через общий файл, или через сокеты(отправляешь данные на IP: 127.0.0.1 - это ИП самого себя)
0
 Аватар для d0s'A
153 / 113 / 25
Регистрация: 23.06.2008
Сообщений: 320
17.09.2009, 14:34
Можно еще через оперативную память...
0
 Аватар для DrMcSheen
62 / 63 / 3
Регистрация: 25.05.2009
Сообщений: 520
17.09.2009, 14:37
Цитата Сообщение от d0s'A Посмотреть сообщение
Можно еще через оперативную память...
или через компьютер
0
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
21.09.2009, 01:13
Цитата Сообщение от d0s'A Посмотреть сообщение
Можно еще через оперативную память...
А как? Расскажи. Мне тоже интересно. Теоретически это вполне осуществимо, но как?
0
5 / 5 / 1
Регистрация: 23.09.2009
Сообщений: 13
23.09.2009, 02:28
Делай через сокеты. в инете куча примеров. ничего проще и красивее не придумаешь
0
85 / 77 / 13
Регистрация: 03.09.2009
Сообщений: 346
23.09.2009, 22:30  [ТС]
Через сокеты так через сокеты. Но скажите, разве не нужна для этого сетевуха?
0
Комбайнёр
 Аватар для MAcK
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
24.09.2009, 15:02
Если программы на одном компе, то нет
1
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
05.10.2009, 02:16
В этой теме я ранее уже написал о собственном ip. Создаешь связь сокета с ним и посылаешь сам себе данные. Сетевая для этого не нужно.

Добавлено через 3 минуты
Но для этих целей лучше использовать оперативную память. Правда, не помню как

Добавлено через 32 секунды
Но для этих целей лучше использовать оперативную память. Правда, не помню как
1
5 / 5 / 1
Регистрация: 23.09.2009
Сообщений: 13
05.10.2009, 02:45
Вообще сетевая карточка не используется, но есть большая вероятность что будет требоваться ...
Есть еще один способ. Также ты можешь сделать так:

1) В программе на Delphi сделать нужное количество функций, которые будут при их выполнении получать нужный данные, и экспортировать эти функции.

2) После того как соберешь прогу на дельфи, займись той которая на шарпе, а именно:
Просто импортируешь эти функции из той проги, приводишь их к нужному виду через маршалинг (класс Marshal)
3) Просто юзаешь эти функции, а они тебе возвращают все то что тебе нужно.

занимает все это строчек 10, + 3 строчки на каждую новую функцию, гдето так ...

Только вот насколько я помню, можно экспортировать и классы целиком (в сях), но с ними потом проблем достаточно много, так что в этом случае, тебе придется обойтись статическими функциями.

!!! Так же не уверен на 100% что он тебе будет отображать информацию в реальном времени ...

Вообще можно просто найти окно по заголовку в нем, и вломиться в его оперативную память, но помоему это сложнее.

Так что лучше используй сокеты и не заморачивайся с оперативкой, работать от не быстрее все равно не станет, по крайней мере ты этоко точно не заметишь, а примеров в инете много. Если постараешся, то за 10-15 минут точно найдешь коротенький и рабочий примерчик...
1
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
05.10.2009, 16:02
У меня где то был небольшой кусочек кода где по сокетам передавал сам себе данные. Вечером приеду домой, поищу и, если найду, выложу. Там всё предельно ясно.
0
85 / 77 / 13
Регистрация: 03.09.2009
Сообщений: 346
05.10.2009, 20:32  [ТС]
Использовать каким-то образом класс дельфи в c# было-бы хорошо, но раз там столько проблем может быть, то откажусь.
Буду копать сокеты - и интересней и потом пригодится. Примеров в сети валом, но в основном бухают кусок кода в 100-200 строк с минимальными комментами. Можно конечно скопировать запустить чужой код, но хотелось бы более-менее разобраться в технологии.
0
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
05.10.2009, 22:09
Вот, нашел.
Если будут вопросы - пиши в личку. С удовольствием помогу.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//Сокеты
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Timers;
 
class Program
{
    static void Main(string[] args)
    {
        Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //Создаем основной сокет
        IPAddress ipAddress = null; //IP-адресс
        IPEndPoint Addr = null; //конечная точка(IP и порт)
 
        Console.WriteLine("1 - Server\n2 - Client");
        switch (Console.ReadKey(true).KeyChar)
        {
            case '1':
                Console.Title = "Server"; //Сервер
                //ipAddress = Dns.GetHostEntry("localhost").AddressList[0]; //Преобразовуем адрес или IP узла в массив IP и берем первый
                Addr = new IPEndPoint(IPAddress.Any, 5300); //"localhost" = 127.0.0.1
                s.Bind(Addr); //"Адресуем" сокет
                s.Listen(10); //Обозначаем количество ожидающих в очереди на подключение
                Console.WriteLine("Ждем коннекта...");
                Socket cl_s = s.Accept(); //Ожидаем подключения
                Console.WriteLine("Есть коннект!");
                while (!Console.KeyAvailable) //Пока не нажата клавиша
                {
                    byte[] msg = new byte[cl_s.Available];
                    cl_s.Receive(msg); //Принимаем МСГ
                    Console.WriteLine(Encoding.UTF8.GetString(msg)); //Конвертируем и выводим
                }
                cl_s.Close(); //Закрываем сокет
                break;
            case '2':
                Console.Title = "Client"; //Клиент
                ipAddress = Dns.GetHostEntry("localhost").AddressList[0];
                Addr = new IPEndPoint(ipAddress, 5300); //"localhost" = 127.0.0.1
                s.Connect(Addr); //Коннектимся к срверу
                while (true) //Вечная истина :)
                {
                    byte[] msg = Encoding.UTF8.GetBytes(Console.ReadLine()); //Конвертируем
                    s.Send(msg); //Отправляем
                }
                break;
        }
        s.Close(); //Закрываем сокет
        Console.ReadKey();
    }
}
Написано от скорой руки, но кратко и понятно

Добавлено через 40 секунд
"localhost" = 127.0.0.1
1
5 / 5 / 1
Регистрация: 23.09.2009
Сообщений: 13
06.10.2009, 18:34
Тоже видел такой пример ))) единственное что вместо Encoding.UTF8 я использовал Encoding.Default, иначе русские буквы не корректно передаваться будут ...
0
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
07.10.2009, 11:47
Вполне корректно. UTF-8 имеет при себе русский.
Думаю, следует руководствоваться своими целями и выбирать нужную кодировку. Это был лишь пример. Сомневаюсь, что стартеру темы нужно передавать именно строку.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.10.2009, 11:47
Помогаю со студенческими работами здесь

Как передать значение переменной из одной формы в другую
Здравствуйте! Подскажите, пожалуйста: string h = this.textBox1.text; другая форма string a= h; как так сделать:)

Как передать массив структур из одной формы в другую
Помогите, пожалуйста, не получается передать массив структур из одной формы в другую. Понимаю, что нужно выполнять упаковку-распаковку,...

Как передать ссылку на экземпляр класса с одной формы на другую
Как передать ссылку на экземпляр класса с одной формы на другую?

Как правильно передать несколько разнородных данных из одной формы в другую?
На форме MainForm много элементов управления (установка цвета, комбобоксы, numUpDown и другие), значения которых я хочу передать в форму...

Как из одной программы корректно завершить другую?
Добрый день! Возникла проблема: одна программа запускает другую, а когда завершает свою работу хотелось бы, чтобы запущенная...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru