我有个模块是用VC写的DLL,在里面我向PB程序的窗口发送了 WM_COPYDATA 消息。
消息中自定义部分是一个自定义的结构体,在VC下是这样的:
- C/C++ code
typedef struct _MSG_TYPE{ DWORD MsgType;} MSG_TYPE, *PMSG_TYPE;typedef struct _UC_MSG{ MSG_TYPE MsgType; char OppoAccount[128]; char OppoNickName[128]; char Content[4096]; } UC_MSG, *PUC_MSG;
WM_COPYDATA 由PB程序处理,请问处理时应该怎么分析这个结构,如何在PB中定义一个与之兼容的结构?谢谢。
------解决方案--------------------
pb定义结构
ypedef struct MSG_TYPE
{
long MsgType;
}
typedef struct _UC_MSG
{
MSG_TYPE MsgType;
string OppoAccount
string OppoNickName
srrint Content
}
这样试试,在PB中使用结构体的时候,要给string预先分配内存空间
------解决方案--------------------
dll 发消息给pb 的时候,结构恐怕不能直接传送。。改为传送 地址。。在pb中得到地址后 再通过地址得到结构内容。。。如果是 传的结构,,可参照楼上。。
------解决方案--------------------
窗口的other事件
Long ll_msg
String ls_test
str_copydatastruct lstr_data
SetNull(ll_msg)
ll_msg = Message.Number
IF ll_msg = WM_COPYDATA THEN
CopyMemory(lstr_data,lparam,12)
ls_test = String(lstr_data.lpdata,"Address")
mle_out.text=mle_out.text+' < <: '+ls_test+char(13)+char(10)
mle_out.text=mle_out.text+'--------------------------------'+char(13)+char(10)
mle_out.SelectText(Len(Mle_out.text)+1, 0)
SetNull(lstr_data.dwdata)
SetNull(lstr_data.cbdata)
SetNull(lstr_data.lpdata)
SetNull(ls_test)
END IF
pb 程序间的发送与接收 wm_copydata
http://download.csdn.net/source/1516725