从C++到C#的编码

本文关键字:编码 C++ | 更新日期: 2023-09-27 18:25:13

我正在从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#编码吗?

从C++到C#的编码

应该在C++程序中始终使用wchar_t,而不是在wchar_t数组上执行操作。

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