Quantcast
Channel: Visual COBOL - Forum - Recent Threads
Viewing all articles
Browse latest Browse all 4356

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 4356

Trending Articles



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