Hello Victor,
Tuesday, October 18, 2005, 2:03:18 AM, you wrote:
VVV> Если сделать структуру типа:
VVV> struct _ANY_TYPE
VVV> {
VVV> char[16] chBuffer;
VVV> long nOtherValue;
VVV> };
VVV> то все перешлется, естесственно.
Все пересылается прекрасно, пока не снимается ловушка, которая сидела в той
самой длл,
которая пересылала указатели на структуру. При этом происходит что-то крайне
интересное:
вышибаются все программы в том числе выполняемая, которая принимает сообщения,
среда
программирования, антивир. Касперского и пр. Один Тотал Коммандер остается в
живых , но и
он время от времени не выдерживает. Запускаю все программы обратно и продолжаю
нормально
работать, пока снова не дойду до строки UnhookWindowsHookEx(hhkKbdHook); А ведь
такого не
было до использования указателей структур, был только указатель на строку char
buf[1024].
Он и передавался. Поможет ли какой-нить добрый человек докопаться до правды.
>> Посоветуйте, что делать? Может, есть
>> какая другая перспектива
>> для
>> передачи данных (что-то вроде унифицированной передачи данных UDT)?
VVV> Механизмов много.
VVV> WM_COPYDATA - один из простейших в реализации.
VVV> Если надо передавать данные переменной длины, то просто клади их
VVV> последовательно в блок памяти и пересылай этот буфер.
VVV> Можно объявить структуру типа:
VVV> struct _DATA_HEADER
VVV> {
VVV> DWORD dwType;
VVV> DWORD dwLen;
VVV> };
VVV> и набор структур для каждого произвольного типа данных:
VVV> struct _SOME_TYPE
VVV> {
VVV> _DATA_HEADER hdr;
VVV> // далее некоторые данные
VVV> };
VVV> потом все данные, которые надо переслать последовательно упаковываешь
VVV> в соответствующие структуры и укладываешь в буфер, пересылаешь в другое
VVV> приложение, а там просто проходишь по буферу и смотришь тип каждого
VVV> блока, размер данных. Ну и делаешь с ними что нибудь.
Можно ссылочку на ресурс, где это поподробнее описывается.
VVV> А насчет механизмов...
VVV> навскидку:
VVV> clipboard
VVV> MMF
VVV> RPC (COM)
VVV> DDE
VVV> Pipes
VVV> Mail Slots
VVV> Sockets
VVV> etc...