C# 调用C++DLL传递的bool型,返回混乱
来源:互联网 发布:蔡振南心事谁人知简谱 编辑:程序博客网 时间:2024/06/11 03:19
问题:C# 调用C++DLL传递的bool型,返回混乱
原因:C++中bool占一个字节,C#中bool占4个字节
解决方法:将C++中的bool该为BOOL,或C#中的bool该为byte
原因:统一变量所占地址空间大小。C++中BOOL与C#中bool同样占用4个字节,C#中byte与C++中bool同样占用一个字节。
C++中定义如下结构体
struct MYSTRUCT
{
int a;
int b;
float c;
bool d;
}
sizeof(MYSTRUCT) == 16;
sizeof(int)*2+sizeof(float)+sizeof(bool) ==13;
二者不相等:编译器会对结构体进行处理时,会进行字节对齐,以加快计算机取数速度。
字节对齐:max(max(sizeof(int),sizeof(float)),sizeof(bool)) == 4;sizeof(MYSTRUCT)应为4的整数倍取16;即:(13+(4-1))/4*4 ==16
若该为如下
struct MYSTRUCT
{
int a;
int b;
float c;
bool d;
bool e;
}
sizeof(int)*2+sizeof(float)+sizeof(bool)*2 ==14;
sizeof(MYSTRUCT) == 16;即(14+(4-1))/4*4 == 16
同样若是如下结构体
struct MYSTRUCT
{
double a;
int b;
bool e;
}
max(max(sizeof(double),sizeof(int)),sizeof(bool)) == 8;
sizeof(double)+sizeof(int)+sizeof(bool) == 13;
sizeof(MYSTRUCT) == (13+(8-1))/8*8 == 16;
C#中定义如下结构
struct MYSTRUCT
{
public int a;
public int b;
public float c;
public bool d;
}
Marshal.SizeOf(typeof(MYSTRUCT)) == 16;
与C++相同,但bool所占字节不同,
(MYSTRUCT)Marshal.PtrToStructure((IntPtr)((UInt32)ptrRsult), typeof(MYSTRUCT));
转换时可能导致混乱。
- C# 调用C++DLL传递的bool型,返回混乱
- C# 调用C++DLL传递的bool型,返回混乱
- C# 调用C++DLL传递的bool型,返回混乱
- C# 调用C++DLL传递的bool型,返回混乱(c++为false,c#确为ture)
- C#调用C++的dll时,c++ dll函数接口中尽量不要用bool返回类型
- C#调用C写的DLL二级指针传递方法
- C#调用C写的DLL二级指针传递方法
- C#调用C++dll方法,char*类型之间的传递
- C#调用C++Dll字符串返回为空的问题
- C# 调用C++dll string传递问题
- Unity使用C#调用C++dll传递指针参数、接收指针返回值
- C#调用C++DLL的小总结8---C++Dll中函数返回字符串指针
- C#调用C的DLL
- C#调用C++dll 结构体参数传递问题
- C#调用C++dll 结构体参数传递问题
- CE下,c#调用c++DLL字符串传递
- C#调用C函数(DLL)传递参数问题
- C#调用C函数(DLL)传递参数问题
- java nio
- 【面向对象课程项目:纸牌】Java实例学习(一):优秀源码的分析
- 剖析Linux系统启动过程
- Hibernate——一级缓存
- 认识 java JVM虚拟机选项 Xms Xmx PermSize MaxPermSize 区别
- C# 调用C++DLL传递的bool型,返回混乱
- 编程读取文档Doc,Docx,Pdf的内容
- AJAX
- jquery插件tablesorter自动排序
- 深入理解Linux启动过程
- 用筛选法求100以内的素数
- 职场打拼不能不知道的反话从
- 按键消抖
- 参加2012 resys会议小结