C++/CLI 托管C++之联合体union封装【10】
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++/CLI 托管C++之联合体union封装【10】,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2179字,纯文字阅读大概需要4分钟。
内容图文
CLI封装Union时,没有对应的类型,使用的是结构体struct,指定每个元素的偏移位置。
【1】声明结构体struct时,需要显示指定为Explicit。
【2】每个数据需要使用FieldOffsetAttribute指定偏移位置。
C++导出函数
typedef union _testStru4 { int iValLower; int iValUpper; struct { __int64 llLocation; }; }testStru4;
//4.4 union类型中含有结构体 EXPORTDLL_CLASS void Struct_Union( testStru4 *pStru ) { if (NULL == pStru) { return; } pStru->llLocation = 1024; wprintf(L"Struct_Union \n"); }
CLI封装
[Serializable] [StructLayoutAttribute(LayoutKind::Explicit)] public ref struct test4 { [FieldOffsetAttribute(0)] Int32 iValLower; [FieldOffsetAttribute(4)] Int32 iValUpper; [FieldOffsetAttribute(0)] Int64 llLocation; void UnmanagedPtr2ManagedStru(IntPtr ptr) { testStru4 *ptStru = static_cast<testStru4 *>(ptr.ToPointer()); if (NULL == ptStru) return; llLocation = ptStru->llLocation; } };
void ExportCLI::StructCls::StructUnion( test4^ %pStru ) { if (pStru == nullptr) { return; } testStru4 strT; strT.llLocation = pStru->llLocation; Struct_Union(&strT); pStru->UnmanagedPtr2ManagedStru(IntPtr(&strT)); }
CLI类声明
/// <summary> /// 3 结构体测试类 /// </summary> public ref class StructCls { public: /// <summary> /// 3.1 结构体作为输入输出参数 /// </summary> /// <param name="pStru">结构体</param> static void StructChange(test1^ %pStru); /// <summary> /// 3.2 结构体边界对齐 /// </summary> /// <param name="pStru">结构体</param> static void StructPackN(test2^ %pStru); /// <summary> /// 3.3 结构体中含有内置数据类型的数组 /// </summary> /// <param name="pStru">结构体</param> static void StructChangeArr(test3^ %pStru); /// <summary> /// 3.4 union类型中含有结构体 /// </summary> /// <param name="pStru">结构体</param> static void StructUnion(test4^ %pStru); /// <summary> /// 3.5 结构体数组作为参数 /// </summary> /// <param name="pStru">结构体数组</param> static void StructStruArr(List<test5^>^ pStru); };
C#测试:
可以看到,当给llLocation赋值时,其余iValLower也会自动赋值。
test4 tStru4 = new test4(); tStru4.llLocation = 44444444444; StructCls.StructUnion(ref tStru4);
源码:
https://coding.net/u/aoshilangCode/p/CLI/git
原文:http://blog.csdn.net/aoshilang2249/article/details/42319663
内容总结
以上是互联网集市为您收集整理的C++/CLI 托管C++之联合体union封装【10】全部内容,希望文章能够帮你解决C++/CLI 托管C++之联合体union封装【10】所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。