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

How to marshal the multi byte character set C#

本文关键字:字符集 多字节 何封送      更新时间:2023-10-16

我需要调用一个使用 C# 中的多字节字符集的函数 (c/c++)。但我不知道如何将其编组为多字节。有谁知道如何将结果转换为字符串?

C#:

[DllImport("essentials.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
        public static extern System.IntPtr GetFiles(string filedir, string path);
        [STAThread]
        static void Main()
        {
            string filedir = @"C:UsersRubenDocumentsSchool*";
            string path = @"C:UsersRubenDocumentsSchool";
            System.IntPtr pointer = GetFiles(filedir, path);
            string files = Marshal.PtrToStringAnsi(pointer); // nothing
        }

C++

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;
    }
}

有关 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);