当前位置: 代码迷 >> PB >> 问个C语言的结构体和PB怎么兼容的有关问题
  详细解决方案

问个C语言的结构体和PB怎么兼容的有关问题

热度:22   发布时间:2016-04-29 08:10:41.0
问个C语言的结构体和PB如何兼容的问题。
我有个模块是用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
  相关解决方案