C# 调用C++DLL传递的bool型,返回混乱
来源:互联网 发布:java关闭线程池 编辑:程序博客网 时间:2024/06/01 15:35
问题: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 进行 RSA 加解密时不得不考虑到的那些事儿
- 在input输入框中回车激活点击按钮事件代码
- c#代码实现软件开机自启动
- 支付宝集成过程详解——运行DEMO
- VC10常见问题汇总
- C# 调用C++DLL传递的bool型,返回混乱
- category extension
- 从照相机,相册获取图片
- iOS网络请求GET方式与POST方式
- C、C++函数和类库详解(VC++版)
- pyc和py文件的区别
- android 启动新 app 的activity 新进程的创建
- android4.0 USB Camera实例(一)JNI层
- 第1章 引言