Объявите последний параметр SendMessage
как byref lParam as myType
.
Однако вы злоупотребляете системой обмена сообщениями. Это нормально, если вы знаете, что делаете, и уверены, что никакая системная логика обработки по умолчанию никогда не будет применена к этому сообщению.
Чтобы уточнить, на стороне получателя вы делаете следующее, чтобы получить данные.
Сначала вы объявляете процедуру обработки сообщений с последним параметром ByVal lParam As Long
. Также есть функция:
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Затем, когда вы получите сообщение:
if uMsg = WM_SETTEXT then
dim t as myType
copymemory t, byval lParam, len(t)
'Using t here
end if
Чтобы уточнить немного.
Поскольку все потоки находятся внутри одного процесса, вы можете просто поделиться указателями и сделать это с помощью WM_COPYDATA
. Вам понадобится только первый член структуры COPYDATASTRUCT
.
На конце отправки вы устанавливаете COPYDATASTRUCT.dwData = VarPrt(your_struct)
.
На принимающей стороне вы делаете ту же самую вещь CopyMemory
, показанную выше.
Обратите внимание, что если ваша подпрограмма обработки сообщений будет получать только это единственное сообщение (и никаких других сообщений), то вы можете просто объявить его последний параметр как ByRef lParam As myType
и использовать его напрямую, избегая копирования.