Хотел написать Кирпич, но чего-то он получился очень сырой. Выложу пока тут
Суть: мессаги больше WM_USER - а именно такие используют, например, все Common Controls - по умолчанию не маршалятся, т.е. передаваемый в них указатель должен указывать на данные в АП получателя. Значит, надо как-то внедрять туда свой участок памяти и передавать указатель на него.
Эта техника не нова, она использовалась Оловянниковым в его примере "Who lives in my system tray" (правда, он у меня так и не заработал ни на одной Винде) и мной в теме "Расширить часики в трее". Здесь я хотел построить реюзабельный компонент для этого дела, чтобы не изобретать велосипед каждый раз.
Структура компонента: 2 файла - modMarshal.bas и cMarshal.cls
CreateMarshal создаёт по hWnd маршалер (объект cMarshal) заданного размера (по умолчанию - 1024 байта).
cMarshal::MarshalInto передаёт данные в процесс получателя
cMarshal::MarshalFrom получает данные из процесса получателя
Объект cMarshal при своём уничтожении сам закроет все хэндлы, об этом заботиться не надо.
Совместимость: проверено на Win2000, скорее всего будет работать в WinNT4+
Если кому-то не лень приделать поддержку Win9x, милости прошу
[приложение удалено]