一个关于在IDL文件中union结构体的问题,真是搞不懂,为什么微软可以我不可以!

Snow_1980 Snow_1980 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在微软的DIRECTX的SDK文档中可以查看到三维矩阵结构体D3DMMATRIX,定义如下:
typedef struct _D3DMMATRIX {
union {
struct {
D3DMVALUE _11, _12, _13, _14;
D3DMVALUE _21, _22, _23, _24;
D3DMVALUE _31, _32, _33, _34;
D3DMVALUE _41, _42, _43, _44;
};
D3DMVALUE m[4][4];
};
} D3DMMATRIX;
DIRECTX很多借口都用到了这个结构体做参数

我建立了一个ATL工程,在IDL文件中加入了D3DMMATRIX的定义,并在接口中使用D3DMMATRIX结构体作为参数传递,结构编译出错:
.\adsf.idl(35) : error MIDL2143 : parameter must not derive from a non-rpcable union : [( Parameter 'pVal' ) ]
.\adsf.idl(35) : error MIDL2161 : union has at least one arm without a case label : [ Field ( Parameter 'pVal' ) ]
.\adsf.idl(35) : error MIDL2161 : union has at least one arm without a case label : [ Field 'm' ( Parameter 'pVal' ) ]
.\adsf.idl(36) : error MIDL2143 : parameter must not derive from a non-rpcable union : [( Parameter 'newVal' ) ]
.\adsf.idl(36) : error MIDL2161 : union has at least one arm without a case label : [ Field ( Parameter 'newVal' ) ]
.\adsf.idl(36) : error MIDL2161 : union has at least one arm without a case label : [ Field 'm' ( Parameter 'newVal' ) ]

报错的意思就是因为在结构体中使用了union,好像是要求我对D3DMMATRIX添加swith_is或swith_type属性,那样的话又必须在D3DMMATRIX中再添加一个新的参数,就改变了D3DMMATRIX的定义!

所以真是很搞不懂,不知道微软的DIRECTX是如何解决这个问题的,不知那位高手知道如何解决,请指点我一下,不胜感激!!百分相赠!
...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
Snow_1980
VC/MFC 16,550 成员 421,606 内容