1

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:\Users\Ruben\Documents\School\*";
            string path = @"C:\Users\Ruben\Documents\School\";
            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;
    }
}
4

2 に答える 2

0

最初に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);
于 2012-09-28T09:51:14.737 に答える
0

MSDN に関する情報:文字列の既定のマーシャリング

于 2012-09-24T19:33:42.200 に答える