Буду рад если вы поможете мне решить одну проблемку
Я программист VC6. У заказчиков программист Delphi. Нам необходимо реализовать обмен информацией, заданной в виде структуры данных, между программами . Направление передачи любое. Программы могут быть запущены как на одном комьютере, так и на разных в локальной сети.
Пожалуйста, подскажите как это сделать. Вопрос для меня архиважный, если нужны еще подробности -я напишу.
27.11.03 18:12: Перенесено модератором из 'C/C++' — ПК
Re: Обмен данными между программами на VC и Delphi
Здравствуйте, Frontman, Вы писали:
F>Буду рад если вы поможете мне решить одну проблемку F> Я программист VC6. У заказчиков программист Delphi. Нам необходимо реализовать обмен информацией, заданной в виде структуры данных, между программами . Направление передачи любое. Программы могут быть запущены как на одном комьютере, так и на разных в локальной сети. F> Пожалуйста, подскажите как это сделать. Вопрос для меня архиважный, если нужны еще подробности -я напишу.
XML, однозначно
... << RSDN@Home 1.1.2 beta 1 >>
The life is relative and reversible.
Re: Обмен данными между программами на VC и Delphi
Здравствуйте, Frontman, Вы писали:
F>Буду рад если вы поможете мне решить одну проблемку F> Я программист VC6. У заказчиков программист Delphi. Нам необходимо реализовать обмен информацией, заданной в виде структуры данных, между программами . Направление передачи любое. Программы могут быть запущены как на одном комьютере, так и на разных в локальной сети. F> Пожалуйста, подскажите как это сделать. Вопрос для меня архиважный, если нужны еще подробности -я напишу.
Используй string in XML format.
Передаешь в виде строки и разбираешь с помощью MSXML внутри проги.
Re: Обмен данными между программами на VC и Delphi
Здравствуйте, Frontman, Вы писали:
F>Буду рад если вы поможете мне решить одну проблемку F> Я программист VC6. У заказчиков программист Delphi. Нам необходимо реализовать обмен информацией, заданной в виде структуры данных, между программами . Направление передачи любое. Программы могут быть запущены как на одном комьютере, так и на разных в локальной сети. F> Пожалуйста, подскажите как это сделать. Вопрос для меня архиважный, если нужны еще подробности -я напишу.
Описание структур как на Delphi так и на С++ одинаковы единственно в Delphi обязательно делать Packed Record чтобы данные выравнивались строго по границам полей, аналогично директивы должны быть и в С++.
Вариант передачи обычно это СОМ или сокеты итд
и солнце б утром не вставало, когда бы не было меня
Re: Обмен данными между программами на VC и Delphi
Передавать через сокеты. Есть у вас уже есть продуманная структура программы, то есть уже сейчас можно описать 70% вариантов структур, то бинарный формат + идентичные описания на C++ и Delphi. Есть меять сруктуры надо часто, то лучше текстовый формат. Если не боитесь СОМ, то лучше сделать кучку СОМ объектов и дёргать их. Правда вот в локальной сети, в отличие от сокетового варианта, могу возникнуть проблемы аутенфикации.
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, Frontman, Вы писали:
A>Передавать через сокеты. Есть у вас уже есть продуманная структура программы, то есть уже сейчас можно описать 70% вариантов структур, то бинарный формат + идентичные описания на C++ и Delphi. Есть меять сруктуры надо часто, то лучше текстовый формат. Если не боитесь СОМ, то лучше сделать кучку СОМ объектов и дёргать их. Правда вот в локальной сети, в отличие от сокетового варианта, могу возникнуть проблемы аутенфикации.
Здравствуйте, adontz!
Мне понравилась Ваша идея насчет сокетов. Действительно, все структуры уже продуманы, но! в них есть поля переменной длины. Это ничего?
Я не боюсь COM, но не обладаю достаточной квалификацией, чтобы с ходу решить как их использовать. Раньше я пользовался RPC, но его не встроить в Delphi.
Меня заинтересовала фраза "сделать кучку СОМ объектов и дёргать их". Если вас не затруднит, напишите подробнее как это? Для COM ведь нет разницы какими средствами он был создан, а это меня радует!
Re[3]: Обмен данными между программами на VC и Delphi
F> Мне понравилась Ваша идея насчет сокетов. Действительно, все структуры уже продуманы, но! в них есть поля переменной длины. Это ничего? F> Я не боюсь COM, но не обладаю достаточной квалификацией, чтобы с ходу решить как их использовать.
Называется я не трус, но я боюсь.
F> Раньше я пользовался RPC, но его не встроить в Delphi. F> Меня заинтересовала фраза "сделать кучку СОМ объектов и дёргать их". Если вас не затруднит, напишите F> подробнее как это? Для COM ведь нет разницы какими средствами он был создан, а это меня радует!
Делаешь DLLку которая будет Сom-сервером. Т.е. ее нужно будет зарегистрировать при помощи regsvr32.exe
просто в коммандной строке regsvr32.exe myserver.dll
потом нужно в программе
var
obj:variant;
begin
obj:=CreateOleObject('MyServerName');
obj.MyMethod(1,2);
obj:=unassigned;
end;
Кто будет на C++ писать тому повезло меньше...имхо попа там по сравнению с дельфей...особенно с параметрами.
Может лучше сделать просто DLL без всякого кома.
Эх, cкоро на свободу. Сидеть осталось 28 дней. Я в бане, а чего больше никто не моется ?
Re[3]: Обмен данными между программами на VC и Delphi
Я не adontz, но все-же попытаюсь прокомментировать...
F> Мне понравилась Ваша идея насчет сокетов. Действительно, все структуры уже продуманы, но! в них есть поля переменной длины. Это ничего?
Это как раз чего. Решается декларацией своего протокола. Поясню:
struct Some
{
int DataLength; // длина данныхunsigned char* Data; // поле переменной длины
};
enum {SOME_STRUCT_FOLLOWS=1};
// передаем через сокетint which_scruct = SOME_STRUCT_FOLLOWS;
Some some;
some.DataLength = 10;
some.Data = new unsigned char[some.DataLength];
if(some.Data)
memcpy(some.Data,"tst string",some.DataLength);
send(sock,&which_scruct,sizeof(int),0);
send(sock, &some.DataLength,sizeof(int),0);
send(sock,some.Data,some.DataLength,0);
// получаем из сокета в обратном порядке, т.е.:
/*
1. Читаем 4 байта с указанием, какая структура следует
2. Читаем зависящую от контекста информацию
*/delete [] some.Data;
Все сильно упрощено, конечно, но представление дает.
F> Меня заинтересовала фраза "сделать кучку СОМ объектов и дёргать их". Если вас не затруднит, напишите подробнее как это? Для COM ведь нет разницы какими средствами он был создан, а это меня радует!
Дергать — это создать экземпляр COM-объекта и вызывать его методы
Re[3]: Обмен данными между программами на VC и Delphi
Здравствуйте, Frontman, Вы писали:
F> Мне понравилась Ваша идея насчет сокетов. Действительно, все структуры уже продуманы, но! в них есть поля переменной длины. Это ничего?
Врядли. Если вних етсь указатели, то же проблема. Необходимо как-то утрясти сериализацию объектов в поток. Будет он бинарный или нет. Будут ли поддерживаться дначения по умолчанию для не указанных полей или нет это уже детали реализации, но вот как-то все эти структуры писать и читать надо. Причём надо это делать одинаково. Для того чтобы помимо обычных глюков не отлавливать варианты типа мы записали так, а они прочитали эдак и надо использоватть текстовый формат. У XML очень гибкая структура, позволяющая задавать иерархию.
F> Меня заинтересовала фраза "сделать кучку СОМ объектов и дёргать их". Если вас не затруднит, напишите подробнее как это? Для COM ведь нет разницы какими средствами он был создан, а это меня радует!
Создать экземпляр класса и вызывать его методы. Причём экземпляр можно создать и удалённо. Это на самом деле оптимальный вариант поскольку сериализацией объектом в случае DCOM уже не совсем тебе, а системе придётся заниматься. Да и ОО подход всё таки. С другой тороны как это будет работать в сети, на 98-м и проч. Есть свои проблемы. Не ахти какие сложные, да и решения у них уже есть, но если опыта работы с СОМ и DCOM мало, лучше в это не лезть.
На сайте msgconnect.com есть очень полезный проект MsgConnect, существенно упрощающий обмен данными между процессами. Если кто встретиться с проблемой типа моей -посмотрите.
Re[4]: Обмен данными между программами на VC и Delphi
A>Создать экземпляр класса и вызывать его методы. Причём экземпляр можно создать и удалённо. Это на самом деле оптимальный вариант поскольку сериализацией объектом в случае DCOM уже не совсем тебе, а системе придётся заниматься. Да и ОО подход всё таки. С другой тороны как это будет работать в сети, на 98-м и проч. Есть свои проблемы. Не ахти какие сложные, да и решения у них уже есть, но если опыта работы с СОМ и DCOM мало, лучше в это не лезть.
В Delphi есть очень неплохой компонент TSocketConnection. Суть его проста на клиенте создается обычны Idispstch ный объек который соединяется с сервером Sctsrv который загружает нужный Оле сервер. Весь маршалинг данных берет на себя, но можно работать 98-м и проч и с обычной техникой оле программирования.
и солнце б утром не вставало, когда бы не было меня