从 C++ 到 C# 的编码

Posted

技术标签:

【中文标题】从 C++ 到 C# 的编码【英文标题】:Encoding from C++ to C# 【发布时间】:2012-02-20 07:03:11 【问题描述】:

我正在从 C++ 向我的 C# 程序发送一系列 char arrays

c++ 函数如下所示:

ReturnChar.cpp

extern "C" RETURNCHAR_API char* testString()

    return test;

ReturnChar.h

extern "C" RETURNCHAR_API char* __cdecl testString();

ReturnChar 导入 C#

public static class ImportTest
    
        [DllImport("ReturnChar.dll", EntryPoint = "testString", CallingConvention = CallingConvention.Cdecl)]
        public static unsafe extern char* testString();
    
    public partial class MainWindow : Window
    
        public unsafe MainWindow()
        
            InitializeComponent();
            try
            

                StringBuilder sb = new StringBuilder(new string(ImportTest.testString()));
                textBox1.Text = sb.ToString();
            
            catch(Exception ex)
            
                MessageBox.Show(ex.Message);
            
        
    

我实际上得到了结果,但看起来 C++ 和 C# 之间的编码存在问题。我该如何解决这个问题?

我不打算在我的 C++ 程序中使用 wchar_t,因为我在 char 数组上进行了操作。我可以在 C# 中以某种方式对其进行编码吗?

【问题讨论】:

Interop sending string from C# to C++ 的可能重复项 【参考方案1】:

应该在整个 C++ 程序中使用wchar_t,并改为对wchar_t 数组执行操作。

也就是说,您需要将CharSet = CharSet.Ansi 添加到DllImport 参数中。

【讨论】:

以上是关于从 C++ 到 C# 的编码的主要内容,如果未能解决你的问题,请参考以下文章

如何从 C++ 中的 Base64 编码字符串在 GDI+ 中创建图像?

将带有结构字段的结构从 c++ 返回到 c# pinvoke

C# 转换编码 如何从utf-8转换到gb2312

分析一个用 C++ 编码的 OpenGL 2.0 游戏,入口项目是 C#,全部在 Visual Studio 2010 中?

如何从 C# 代码调用 Google 地理编码服务

使用 c# 将 FileStream 编码为 base64