Hello, please help. I have 2 applications - managed and native - and need to use WM_COPYDATA message to pass (in this case just one string) data from managed to the native one. The most important is to fill the structure COPYDATASTRUCT correctly but until this moment I haven't been successful. The window procedure of the window in the native code receives the message WM_COPYDATA, the address of the COPYDATASTRUCT structure is also ok and cbData and dwData members too. The only thing I don't know is how to pass the string. There're many examples on the internet in C++ or C# but those didn't help me. The sending managed code is following: method-id OnRibbonItemClick (ln-item-name as string) public. 01 COPYDATASTRUCT is typedef. 03 dwdata ULONG. 03 cbdata ULONG. 03 lpdata pointer. 78 WM-COPYDATA value h"004a". 01 cds COPYDATASTRUCT. 01 l-data. 03 l-name pic x(64). set dwdata of cds to 1 set cbdata of cds to length of l-data set lpdata of cds to address of l-data set l-name to ln-item-name declare l-result as binary-long call WAPI "SendMessageA" using by value w-send-hwnd by value WM-COPYDATA size 4 by value w-receive-hwnd by reference cds returning l-result end-call goback. end method. The receiving native code is this: method-id. "WindowProc". local-storage section. 01 l-ptr pointer. 01 l-item-name pic x(64). linkage section. 01 ln-wnd HWND. 01 ln-msg INT. 01 ln-wParam INT. 01 ln-lParam INT. 01 ln-ptr pointer redefines ln-lParam. 01 ln-result LRESULT. * 01 ln-cds COPYDATASTRUCT. 01 ln-data. 03 ln-item-name pic x(64). procedure division using ln-wnd ln-msg ln-wParam ln-lParam returning ln-result. evaluate ln-msg when WM-COPYDATA set address of ln-cds to ln-ptr set address of ln-data to lpdata of ln-cds move ln-item-name to l-item-name when other invoke super "WindowProc" using ln-wnd ln-msg ln-wParam ln-lParam returning ln-result end-evaluate goback. end method "WindowProc". The application fails on the bold underlined line with error MEMORY VIOLATION, resp. 114 Attempt to access beyond bounds of memory. Appreciate any suggestions.
↧