Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

За 2005-10-18

Re[2]: Перемещение папки

>, Вадим Шешунов

ВШ> Найти первый файл в папке, удовлетворяющий нужному критерию;
ВШ> переписать его в нужное место, а в старом месте - удалить.

Теперь всё понятно, делаю.

Номер выпуска : 5014
Возраст листа : 758 (дней)
Количество подписчиков : 532
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/458781
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2005-10-18 22:04:26 (#458781)

Re[3]: Передача через WM_COPYDATA указателя на свою структуру

Hello Deni_S,

Tuesday, October 18, 2005, 9:28:05 AM, you wrote:

D> Все пересылается прекрасно, пока не снимается ловушка, которая сидела в той
самой длл,
D> которая пересылала указатели на структуру. При этом происходит что-то
крайне
D> интересное: вышибаются все программы в том числе выполняемая, которая
принимает
D> сообщения, среда программирования, антивир. Касперского и пр. Один Тотал
Коммандер
D> остается в живых , но и он время от времени не выдерживает. Запускаю
все программы
D> обратно и продолжаю нормально работать, пока снова не дойду
до строки
D> UnhookWindowsHookEx(hhkKbdHook); А ведь такого не было до использования
указателей
D> структур, был только указатель на строку char buf[1024]. Он и передавался.
Поможет ли
D> какой-нить добрый человек докопаться до правды.

Проблема решилась: похоже нельзя удалять в деструктуре класса библиотеки
глобальный
указатель на эту самую биб-ку, иначе получаем супер-вирус, действие которого
описано выше
:)

   2005-10-18 19:06:25 (#458666)

Re[2]: Передача через WM_COPYDATA указателя на свою структуру

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...

   2005-10-18 09:41:05 (#458286)

Re: Передача через WM_COPYDATA указателя на свою структуру

> Сделал в библиотеке структуру с разными переменными и посылаю через
> WM_COPYDATA указатель
> на эту структуру. В окне-клиенте вроде все принимается кроме стринговых
> переменных, вместо
> которых полная ерунда.
Ну это и понятно. Адресные пространства у процессов разные, поэтому и
придумали такое сообщение, как простейший способ передачи информации между
ними. Оно выполняет копирование данных из одного адресного пространства в
другое. Впрочем, не исключено, что и более хитро дейструет, но не в этом
соль. Если в копируемых данных будут указатели, то данные по ним скопированы

не будут. Откуда wind-е знать, где у тебя в структурах указатели, а где
float-ы? Для WM_COPYDATA это просто BYTE[count], где count указано в самом
сообщении.

> Посоветуйте, что делать? Может, есть какая другая
> перспективадля
> передачи данных (что-то вроде унифицированной передачи данных UDT)?

Присоединюсь к Victor V. Vakchturov. У каждого из них есть свои
недостатки и достоинства. Нужно смотреть по контексту, что выгоднее в
конкретном случае.

--
С уважением, boroda

Номер выпуска : 5011
Возраст листа : 758 (дней)
Количество подписчиков : 532
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/458274
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   Шматко А.А. 2005-10-18 09:22:21 (#458274)

БД в сети

Привет comp.soft.prog.prog-list@subscribe.ru,

Есть БД в MSAccess. К ней подключено несколько пользователей. Как
динамически обновлять данные, если один из пользователей внёс
какие-нибудь изменения?
Выделенный сервер для этих целей не подходит, желательно средствами
самой СУБД.

Афоризм напоследок: Жизнь нужно прожить так, чтобы Боги в восторге предложили
еще одну.
Winamp глаголит: M.R. - TO FRANCE
18 октября 2005 г. 7:51:48

Просто студент и будущий инженер
Eugene mailto:rav***@o*****.ru

Номер выпуска : 5010
Возраст листа : 758 (дней)
Количество подписчиков : 532
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/458236
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2005-10-18 07:59:39 (#458236)

Re[2]: OleVariant

>> Если для обмена между приложениями используется тип OleVariant, то
>> нужно-ли очищать в процедуре локальную переменную этого типа?

VVV> Смотря что используется.
Значит так, возвращаемое значение массив, т.е. OleVariant = array of
OleVariant. Получатель обрабатывает этот массив, создает по данным
свои объекты и пр... Я так понимаю массив занимает память и сидит там.
Вот отсюда и вопрос сам он очистится, после выхода из процедуры или
его нужно чистить?
Дополнительно: Массив получается от метода реализованного в
СОМ-сервере.

   2005-10-18 06:13:27 (#458212)

Re: Передача через WM_COPYDATA указателя на свою структуру

Здравствуйте !

> Сделал в библиотеке структуру с разными переменными и
> посылаю через WM_COPYDATA
> указатель
> на эту структуру. В окне-клиенте вроде все принимается кроме
> стринговых переменных,
> вместо> которых полная ерунда.

Ну да. Посылается _структура_ в которой, судя по всему, есть
_указатели_ на блоки памяти со строковыми данными. То есть если
послать через WM_COPYDATA структуру так:

struct _ANY_TYPE
{
char *pchPointer;
long nOtherValue;
};

_ANY_TYPE sData =
{
"Text text text",
10
};

// отсылка через WM_COPYDATA ...

то, скорее всего в адресном пространстве принимающего процесса
указатель pchPointer не будет указывать на валидный блок памяти.
Тем более строка волшебным образом не скопируется.

Если сделать структуру типа:

struct _ANY_TYPE
{
char[16] chBuffer;
long nOtherValue;
};

то все перешлется, естесственно.

> Посоветуйте, что делать? Может, есть
> какая другая перспектива
> для
> передачи данных (что-то вроде унифицированной передачи данных UDT)?

Механизмов много.
WM_COPYDATA - один из простейших в реализации.
Если надо передавать данные переменной длины, то просто клади их
последовательно в блок памяти и пересылай этот буфер.

Можно объявить структуру типа:

struct _DATA_HEADER
{
DWORD dwType;
DWORD dwLen;
};

и набор структур для каждого произвольного типа данных:

struct _SOME_TYPE
{
_DATA_HEADER hdr;
// далее некоторые данные
};

потом все данные, которые надо переслать последовательно упаковываешь
в соответствующие структуры и укладываешь в буфер, пересылаешь в другое
приложение, а там просто проходишь по буферу и смотришь тип каждого
блока, размер данных. Ну и делаешь с ними что нибудь.

А насчет механизмов...
навскидку:

clipboard
MMF
RPC (COM)
DDE
Pipes
Mail Slots
Sockets
etc...

   2005-10-18 02:00:05 (#458117)

Передача через WM_COPYDATA указателя на свою структуру

Hello Форум,

Сделал в библиотеке структуру с разными переменными и посылаю через WM_COPYDATA
указатель
на эту структуру. В окне-клиенте вроде все принимается кроме стринговых переменных,
вместо
которых полная ерунда. Посоветуйте, что делать? Может, есть какая другая перспектива
для
передачи данных (что-то вроде унифицированной передачи данных UDT)?

   2005-10-18 01:12:16 (#458106)

Re: OleVariant

Здравствуйте !

> Если для обмена между приложениями используется тип OleVariant, то
> нужно-ли очищать в процедуре локальную переменную этого типа?

Смотря что используется.
Есть API функция: VariantClear. Всякие обертки итпа как в MFC
COleVariant, по идее сами при все должны чистить в деструкторах.

   2005-10-18 00:00:39 (#458082)