Quantcast
Channel: Visual COBOL
Viewing all articles
Browse latest Browse all 5819

Forum Post: WM_COPYDATA

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

Viewing all articles
Browse latest Browse all 5819

Latest Images

Trending Articles



Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>