如何封送多字节字符集C#

如何封送多字节字符集C#,c#,c++,string,marshalling,C#,C++,String,Marshalling,我需要调用一个函数(c/c++),该函数使用c#中的多字节字符集。但我不知道如何将其作为多字节处理。有人知道如何将结果转换为字符串吗 C#: C++ 有关MSDN的信息:您需要先封送C#字符串,请尝试以下操作: [DllImport("essentials.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] public static extern System.IntPtr GetFil

我需要调用一个函数(c/c++),该函数使用c#中的多字节字符集。但我不知道如何将其作为多字节处理。有人知道如何将结果转换为字符串吗

C#:

C++

有关MSDN的信息:

您需要先封送C#字符串,请尝试以下操作:

[DllImport("essentials.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
    public static extern System.IntPtr GetFiles
        ([MarshalAs(UnmanagedType.AnsiBStr)]string filedir,
        [MarshalAs(UnmanagedType.AnsiBStr)]string path);

使用调试器调试本机代码。一种解释是字符串是空的。无法删除此代码,无法再次删除分配的字符[]。
extern "C"
{
    __declspec(dllexport) char* GetFiles(char* filedir, char* path)
    {
        string filedir2 = filedir;
        string path2 = path;
        string files = GetFiles2(filedir2, path2);
        char* Rfiles = new char[files.length() + 1];
        strcpy_s(Rfiles, files.length() + 1, files.c_str());
        return Rfiles;
    }
}
[DllImport("essentials.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
    public static extern System.IntPtr GetFiles
        ([MarshalAs(UnmanagedType.AnsiBStr)]string filedir,
        [MarshalAs(UnmanagedType.AnsiBStr)]string path);