Подтвердить что ты не робот

Как преобразовать неуправляемый тип IntPtr в строку С#?

Я новичок в С# (с родного фона С++), и я пытаюсь написать небольшой пользовательский интерфейс для печати широковещательных сообщений Windows. Я переопределил цикл сообщений WndProc по умолчанию в моей программе на С# так:

[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
    protected override void WndProc(ref Message m)
    {
        // Listen for operating system broadcasts.
        switch (m.Msg)
        {
            case WM_SETTINGCHANGE:

                this.richTextLog.Text += "WM_SETTINGCHANGE - lParam=" + m.LParam.ToString() + "\n";

                break;
        }
        base.WndProc(ref m);
    }

Я хотел бы знать, как получить строковое представление объекта lParam, который имеет тип IntPtr. Это, по сути, пустота * на земле С++, я могу каким-то образом ее нарисовать внутри С#? Предположительно, это небезопасно.

4b9b3361

Ответ 1

Marshal.PtrToStringAuto Метод (IntPtr)

Выделяет управляемый String и копирует все символы до первого нулевого символа из строки, хранящейся в неуправляемой памяти, в нее.

Ответ 2

Вышеприведенный ответ был отличным, и он почти решил ту же проблему для меня, но... Я получил то, что похоже на китайские символы из метода (潆 湵 ⁤ 瑡 氠 慥 瑳 漠 敮 爠 灥 慥 整 ⁤ 浩 条 条慮 敭 > 䌢 ⸢). Мне нужно было использовать метод Marshal.PtrToStringAnsi(IntPtr), как описано здесь: http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.ptrtostringansi.aspx и здесь: http://answers.unity3d.com/info/555441/unitys-simplest-plugin-print-does-not-work.html.

Как только я внес изменения, моя String снова была на английском языке. Не знаю, почему это происходит, но там вы идете!