C#中调用非託管DLL,本地编码正常,但在英文操作系统struct内的string里中文内容都变为?,高手帮助啊!!

遊戲王千金 遊戲王千金 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
出现这种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传递结构体数组的终极解决方案的相关资料,需要的朋友可以参考下

weixin_38604916

FANUC FOCAS协议实战:C#开发CNC数据采集与设备联网指南

在工业自动化与智能制造领域,设备数据采集是实现MES(制造执行系统)和工业物联网(IIoT)的基石。其核心原理在于通过特定的通讯协议,将生产设备(如数控机床CNC)的运行状态、工艺参数等实时数据提取并上传至上层信息系统。FOCAS(FANUC Open CNC API Specifications)协议正是发那科(FANUC)数控系统对外提供数据访问的关键技术接口。它并非标准网络协议,而是一套基于C语言动态链接库(DLL)的API规范,为上位机程序安全、高效地读取CNC内部数据提供了官方途径。掌握FOCAS

weixin_34210740

C#窗体多视图点云系统开发:PCL互操作与视图同步

点云可视化作为三维视觉与激光雷达数据处理的基础能力,在工业质检和上位机工具中需求旺盛。PCL库基于C++实现,无法被C#直接调用,需通过PclSharp封装或C++/CLI桥接实现互操作,这是构建C#窗体应用多视图点云系统的技术前提。此类系统能将点云加载、旋转缩放、多角度对比集成到WinForms界面,显著降低算法验证与交付成本。开发中常会遇到C#调用C++点云库时出现的AccessViolation(c0000005)崩溃、OpenGL多视口上下文冲突等问题,掌握其成因与规避方法尤为关键。C#窗体应用多视

weixin_33778544

C#调用非托管代码时参考(整理)

C#调用非托管代码时参考(整理)有代码, 不返回值的参数,带返回值(char *),带返回值(其他类型),传递结构体指针(C++填充),传递结构体数组(C++来填充),注意问题 类型不一致,会导致调用失败, (1) long 类型,在C++中是4字节的整数,在C#中是8字节的整数; (2) 字符串类型的设置不正确;

gbyzzj

C#调用C/C++ Dll中函数实例代码

实例代码说明如何在托管的C#代码中调用非托管的Win32 API或者自己用C/C++写的Dll中的函数,以及如何传递输入、输出字符串参数,结构类型参数等问题。

ZOLoveGD
评论 4
收藏 已收藏
分享
返回顶部
遊戲王千金
C# 111,129 成员 642,540 内容