ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

C# 与 C++ 的字符串:从 char* 到 std::string 的自动转换到底发生了什么

C# 与 C++ 的字符串:从 char* 到 std::string 的自动转换到底发生了什么

一、先把问题摆清楚

1.1 一段看起来毫无悬念的代码

[DllImport("NativePlugin", CharSet = CharSet.Ansi)] static extern int SetPlayerName(string name);
extern "C" __declspec(dllexport) int SetPlayerName(const std::string& name) { g_player.name = name; // 直接接住 return 0; }

托管代码传string,原生代码收const std::string&,中间没有任何显式转换,编译也通过了。这就是所谓的"自动转换"。

但这行代码里其实藏着四套彼此独立的机制,任何一套没对上,就会出现"在开发机上好好的,上线中文全是问号":

层谁在做转换转成什么出错时的表现
C# 调用方—传一个托管string—
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进