C#调用C++ 平台调用P/Invoke 结构体--内存对齐方式、union封装【七】
来源:互联网 发布:epica软件下载 编辑:程序博客网 时间:2024/05/22 06:10
【1】内存对齐方式
C++代码:
#pragma pack(push)#pragma pack(1)typedef struct _testStru2{intiVal;charcVal;__int64 llVal;}testStru2;#pragma pack(pop)
EXPORTDLL_API void Struct_PackN( testStru2 *pStru ){if (NULL == pStru){return;}pStru->iVal = 1;pStru->cVal = 'a';pStru->llVal = 2;wprintf(L"Struct_PackN \n");}
C#代码,指定Pack即可:
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]public struct testStru2{ public int iVal; public sbyte cVal; public long llVal;};[DllImport("ExportDll.dll", CharSet = CharSet.Unicode)]public static extern void Struct_PackN(ref testStru2 pStru);
测试:
CExportDll.testStru2 stru2 = new CExportDll.testStru2();CExportDll.Struct_PackN(ref stru2);
【2】Union中含有结构体
C++代码:
typedef union _testStru4{intiValLower;intiValUpper;struct {__int64 llLocation;};}testStru4;
EXPORTDLL_API void Struct_Union( testStru4 *pStru ){if (NULL == pStru){return;}pStru->llLocation = 1024;wprintf(L"Struct_Union \n");}
C#代码:定义成Explict,并显示通过FieldOffset指定内存偏移
[StructLayout(LayoutKind.Explicit, CharSet=CharSet.Unicode)]public struct testStru4{ [FieldOffset(0)] intiValLower; [FieldOffset(4)] intiValUpper; [FieldOffset(0)] long llLocation; };[DllImport("ExportDll.dll", CharSet = CharSet.Unicode)]public static extern void Struct_Union(ref testStru4 pStru);
CExportDll.testStru4 stru4 = new CExportDll.testStru4();CExportDll.Struct_Union(ref stru4);
1 0
- C#调用C++ 平台调用P/Invoke 结构体--内存对齐方式、union封装【七】
- 平台调用P-INVOKE完全掌握, 结构体边界对齐和内存布局
- 平台调用P-INVOKE完全掌握, 结构体边界对齐和内存布局
- C#调用C++ 平台调用P/Invoke 结构体--结构体嵌套【八】
- P/Invoke (平台调用)
- P/Invoke平台调用
- 平台调用P/INVOKE
- P/Invoke (平台调用)
- 平台调用P-INVOKE(三)--(封送结构体)
- 平台调用P-INVOKE(三)--(封送结构体)
- 平台调用P-INVOKE(三)--(封送结构体)
- C#中的平台调用(P/Invoke)
- C#调用C++ 平台调用P/Invoke 结构体--输入输出参数、返回值、返出值、结构体数组作为参数【五】
- C#调用C++ 平台调用P/Invoke 调用约定【一】
- C#调用C++ 平台调用P/Invoke 结构体--含有内置数据类型的一维、二维数组、字符串指针【六】
- C#调用C++ 平台调用P/Invoke 字符串【三】
- P/Invoke平台调用技术
- 平台调用P-INVOKE完全掌握, 结构体和结构体指针
- ARM常用汇编指令集
- My Site Clean Up Job介绍
- ListView下拉刷新
- 动画CAAnimationGroup
- cocos2d-x windows平台打包exe (转载)
- C#调用C++ 平台调用P/Invoke 结构体--内存对齐方式、union封装【七】
- 测试一下
- 织梦DedeCMS提示“无法获得主键,因此无法进行后续操作
- linux 服务器下入侵之后的日志清理
- Invalid layout of java.lang.String at value错误的解决办法
- 数组的串行化与反串行化
- 整合Visual Studio 2013开发环境
- 数据结构归纳总结之概述
- mac 小工具