当前位置: 首页 > article >正文

【C#/C++】C#调用C++ DLL bool返回值始终为true的问题排查

问题描述

在C#项目中,调用C++DLL中方法时,bool返回值始终返回true。

问题原因

C将布尔定义为4字节int,C++将其定义为1字节。C#团队决定在PInvoke期间使用4字节bo0l作为默认值,因为大多数系统API函数Q 使用4字节值作为bool。如果要更改此行为,必须通过封送处理来完成,并指定要使用1字节值。

解决方案

方案一

采用int 返回值替代bo0l返回值,如返回1代表true,返回0代表false。

方案二

通过[return:MarshalAs(UnmanagedType.11)]指定返回值为1字节值。

[DllImport("DLLINTER.dll", EntryPoint="OPENC", CallingConvention=CallingConvention.Cdecl)]  
[return:MarshalAs(UnmanagedType.I1)]  
public static extern bool OPENC([MarshalAs(UnmanagedType.LPStr)] string name);

//测试  
public static extern bool OPENC(  string name);     也可以

http://www.kler.cn/a/553455.html

相关文章:

  • 阐解WiFi信号强度
  • Breakout Tool
  • 【CUDA 】第4章 全局内存——4.4 核函数可达到的带宽(4对角转置)
  • 【golang】channel带缓存和不带缓存的区别,应用场景解读
  • 一周学会Flask3 Python Web开发-http响应状态码
  • 【LLM】Llama 3 论文精读
  • 使用DeepSeek编写VTK读取PLY的Demo
  • 网络爬虫学习:借助DeepSeek完善爬虫软件,实现模拟鼠标右键点击,将链接另存为本地文件
  • frameworks 之 Activity添加View
  • NLP指标全解
  • SpringBoot中使用 ThreadLocal 进行多线程上下文管理及其注意事项
  • Spring Scheduling Tasks+Redis实现分布式定时任务
  • CRMEB JAVA多商户外贸版演示地址
  • 【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter17-事件
  • fpga助教面试题
  • 【论文学习】RVS-FDSC:一种基于四方向条带卷积的视网膜血管分割方法以增强特征提取
  • 开源之夏经验分享|Koupleless 社区魏照华:开源精神是场永不停歇的接力
  • C++ Primer 构造函数再探
  • 【学习笔记】Cadence电子设计全流程(一)Cadence 生态及相关概念
  • 碳化硅(SiC)功率器件:新能源汽车的“心脏”革命与技术突围