C#中调用非託管DLL,本地编码正常,但在英文操作系统struct内的string里中文内容都变为?,高手帮助啊!!
第一反应是
在英文操作系统内找不到任何一个字符GB2312的内码,所以中文只能以“?”代替这个字符,
用 Encoding.Default.EncodingName.ToString()在英文系统调试输出: Western European (Windows)
注本地正常因为输出是简体中文(GB2312)
试过以下二种方式都无效
(1)在struct上添加 [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
本地正常,英文操作系统还是“?”
(2)在struct上添加 [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
本地乱码,英文操作系统乱码。
备注:
C
struct UserRecord
{
char name[128]; // name
..//略
C#
public struct UserRecord
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string name;
..//略
还在毫无思路,请高手帮助下..
相关推荐
C#调用C++DLL传递结构体数组的终极解决方案
主要介绍了C#调用C++DLL传递结构体数组的终极解决方案的相关资料,需要的朋友可以参考下
FANUC FOCAS协议实战:C#开发CNC数据采集与设备联网指南
在工业自动化与智能制造领域,设备数据采集是实现MES(制造执行系统)和工业物联网(IIoT)的基石。其核心原理在于通过特定的通讯协议,将生产设备(如数控机床CNC)的运行状态、工艺参数等实时数据提取并上传至上层信息系统。FOCAS(FANUC Open CNC API Specifications)协议正是发那科(FANUC)数控系统对外提供数据访问的关键技术接口。它并非标准网络协议,而是一套基于C语言动态链接库(DLL)的API规范,为上位机程序安全、高效地读取CNC内部数据提供了官方途径。掌握FOCAS
C#窗体多视图点云系统开发:PCL互操作与视图同步
点云可视化作为三维视觉与激光雷达数据处理的基础能力,在工业质检和上位机工具中需求旺盛。PCL库基于C++实现,无法被C#直接调用,需通过PclSharp封装或C++/CLI桥接实现互操作,这是构建C#窗体应用多视图点云系统的技术前提。此类系统能将点云加载、旋转缩放、多角度对比集成到WinForms界面,显著降低算法验证与交付成本。开发中常会遇到C#调用C++点云库时出现的AccessViolation(c0000005)崩溃、OpenGL多视口上下文冲突等问题,掌握其成因与规避方法尤为关键。C#窗体应用多视
C#调用非托管代码时参考(整理)
C#调用非托管代码时参考(整理)有代码, 不返回值的参数,带返回值(char *),带返回值(其他类型),传递结构体指针(C++填充),传递结构体数组(C++来填充),注意问题 类型不一致,会导致调用失败, (1) long 类型,在C++中是4字节的整数,在C#中是8字节的整数; (2) 字符串类型的设置不正确;
C#调用C/C++ Dll中函数实例代码
实例代码说明如何在托管的C#代码中调用非托管的Win32 API或者自己用C/C++写的Dll中的函数,以及如何传递输入、输出字符串参数,结构类型参数等问题。


