描述:
我在idl文件中定义了一个结构体,该结构体中有一个union,然后在接口函数中的某个输入参数的类型是该结构体类型,但是编译时有以下错误:
: error MIDL2143 : parameter must not derive from a non-rpcable union : [( Parameter 'pkg_sp' ) ]
: error MIDL2161 : union has at least one arm without a case label : [ Field 'pkg_connect_resp' ( Parameter 'pkg_sp' ) ]
: error MIDL2161 : union has at least one arm without a case label : [ Field 'pkg_submit_resp' ( Parameter 'pkg_sp' ) ]
: error MIDL2161 : union has at least one arm without a case label : [ Field 'pkg_query_resp' ( Parameter 'pkg_sp' ) ]
如何解决,送50分
类型定义如下:
typedef struct
{ PKG_END pkg_end ;
PKG_HEAD pkg_head;
.........
union
{
PKG_CONNECT_RESP pkg_connect_resp;
PKG_SUBMIT_RESP pkg_submit_resp;
PKG_QUERY_RESP pkg_query_resp;
PKG_CANCEL_RESP pkg_cancel_resp;
PKG_ACTIVETEST_RESP pkg_active_test_resp;
PKG_DELIVER pkg_deliver;
};
}PKG_SP,*LPPKG_RECV;
解决方案1:
使用一个鉴别器吧。
具体做法,增加一个成员变量t,用来鉴别类型。
typedef struct
{ PKG_END pkg_end ;
PKG_HEAD pkg_head;
.........
short t;//增加的鉴别变量。
[switch_is(t)] union VALUE
{
[case(1)] PKG_CONNECT_RESP pkg_connect_resp;
[case(2)] PKG_SUBMIT_RESP pkg_submit_resp;
[case(3)] PKG_QUERY_RESP pkg_query_resp;
[case(4)] PKG_CANCEL_RESP pkg_cancel_resp;
[case(5)] PKG_ACTIVETEST_RESP pkg_active_test_resp;
[case(6)] PKG_DELIVER pkg_deliver;
};
}PKG_SP,*LPPKG_RECV;
很简短
在qq 里说明白了吧