一个关于在IDL文件中union结构体的问题,真是搞不懂,为什么微软可以我不可以!
在微软的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是如何解决这个问题的,不知那位高手知道如何解决,请指点我一下,不胜感激!!百分相赠!
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是如何解决这个问题的,不知那位高手知道如何解决,请指点我一下,不胜感激!!百分相赠!
...全文
相关推荐
IDL语法.pdf
IDL语法
【信息科学与工程学】计算机科学与自动化——第一百九十八篇 高并发高可用的知识点01
以上补充约 110 行,涵盖分布式协调、服务网格细节、数据库高级特性、性能分析工具、混沌工程、安全渗透、合规审计、研发效能、新兴技术、架构模式、实用工具及经典论文。涵盖数据库索引与锁、NoSQL、前端性能、安全攻防、压测工具深入、监控深入、云原生存储、服务治理扩展、代码质量、DevOps 文化、行业标准、软技能及未来趋势。好的,继续补充更多高并发、高可用、高可靠的知识与技术,涵盖更深层的数据库内部机制、分布式事务、服务治理、运维自动化、安全与前沿技术等领域。
IDL接口定义语言[定义].pdf
IDL接口定义语言[定义].pdf
关于VisiBroker-For-Delphi的使用.doc
关于VisiBroker-For-Delphi的使用.doc
TAO编程指南.doc
TAO编程指南.doc


