关于UNION联合体的调用问题

keynes 2001-08-15 09:03:33
以下的DLL函数怎么调用?
#ifndef _CMPPPDU_H
#define _CMPPPDU_H


#define S_char unsigned char
#define CMPP_SUBMIT 0x00000004
#define CMPP_SUBMIT_REP 0x80000004
#define MESS_HEAD_LEN sizeof(MESSAGE_Head)
#define CMPP_SUBM_LEN sizeof(Cmpp_Submit)
#define CMPP_SUBM_REP_LEN sizeof(Cmpp_Submit_REP)
typedef struct {
unsigned int Total_Length;
unsigned int Command_ID;
unsigned int Sequence_ID;
}MESSAGE_Head;
typedef struct{
S_char Pk_total;
S_char Pk_number;
S_char Registered_Delivery; /*该条信息是否要求应答*/
S_char Msg_level;
char Service_id[10];
S_char Fee_UserType;
char Fee_terminal_id[21]; /* new added by lxj **/
S_char TP_pid; /* new added On Jun 15 **/
S_char TP_udhi; /* new added **/
S_char Msg_Fmt;
char Msg_src[6];
char FeeType[2];
char FeeCode[6];
char Valid_Time[17];
char At_Time[17];
char Src_terminal_id[21];
S_char DestUsr_tl;
}Submit_PART;
typedef union{
char Dest_terminal_id[21];
char *dest;
}DEST_t;
typedef union{
char Msg_Content[140];
struct packet{
int length;
char *pkt;
}Content;
}Msg_C;
typedef struct{
MESSAGE_Head Message_Head;
char Msg_id[8];
Submit_PART S_part;
DEST_t Dest_phone;
S_char Msg_Length;
Msg_C Msg_Cont;
char Reserve[8];
}Cmpp_Submit;//这个是发送数据的消息体结构


extern "C" __declspec(dllexport) int CmppSend(HWND m_hWnd,char host[30],unsigned int iport,Cmpp_Submit submit);
我的调用过程如下:
/*这条*/strcpy(dd.Msg_Cont.Msg_Content,SMS_Data);
strcpy(dd.S_part.Service_id,Service_ID);// '服务类型码
/*这条*/dd.Dest_phone.dest=DestAddr;//'目标手机号码
PrintString("提取信息成功,开始发送本条信息!\n");
ret=SendFun(NULL,"211.137.96.147",7900,dd);
if(ret==0) {PrintString("本条信息发送成功\n");}
else {PrintString("本条信息发送不成功!\n");}

//SMS_Data和Service_ID都是CHAR类型的,并在上面正确赋了值。



我想知道的是,关于UNION类型的联合体,什么时候用哪个部分,什么时候用另一个部分?
...全文
309 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
keynes 2001-08-22
  • 打赏
  • 举报
回复
To cryy:
问题没有解决,最后我就不用API了,自己来写SOCKET程序。
cryy 2001-08-18
  • 打赏
  • 举报
回复
解决了吗?
keynes 2001-08-15
  • 打赏
  • 举报
回复
moveup
keynes 2001-08-15
  • 打赏
  • 举报
回复
该省的API没有任何手册就是给了这么一个DLL和H文件。没有任何说明啊。
keynes 2001-08-15
  • 打赏
  • 举报
回复
To cryy:
以上就是从头文件里摘抄的。
这就是API啊,每个省的API都不样。
lbqsv 2001-08-15
  • 打赏
  • 举报
回复
gz
cryy 2001-08-15
  • 打赏
  • 举报
回复
CMPP的头文件?
梦网不是有API吗?
xlfrd 2001-08-15
  • 打赏
  • 举报
回复
Union多用于一址多义的情况,比如IMAGE_THUNK_DATA32的定义为
union{
PBYTE ForwarderString;
PDWORD Function;
DWORD Ordinal;
PIMAGE_IMPORT_BY_NAME AddressOfData;
}u1;
在有转交的时候用第一个,在PE载入后内容被改为函数指针,这时用第二个,在最高位为1时,低31位为序号,这时用第三个,最高位不为1,低31位是PIMAGE_IMPORT_BY_NAME,这时用第四个。其实都是一个地址的DWORD。
csdnflysnow 2001-08-15
  • 打赏
  • 举报
回复
应该是你在发不同的CMPP的包时需要使用联合体的不同部分.因为CMPP协议本身大的包结构时一样的,但不同包的内容不一样,所以定义秤联合体.你要参照CMPP协议来做或DLL 的使用手册.
keynes 2001-08-15
  • 打赏
  • 举报
回复
move again
keynes 2001-08-15
  • 打赏
  • 举报
回复
move up!
keynes 2001-08-15
  • 打赏
  • 举报
回复
To leech42!
Could you describe your idea in detail?
Thanks.
leech42 2001-08-15
  • 打赏
  • 举报
回复
从第一个字节开始,次之

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧