Как я могу преобразовать неуправляемый тип IntPtr в строку c #? - PullRequest
17 голосов
/ 07 февраля 2012

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

[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. По сути, это пустота * в земле C ++, могу ли я как-то разыграть ее в C #? Предположительно, это небезопасно.

Ответы [ 2 ]

24 голосов
/ 07 февраля 2012

Marshal.PtrToStringAuto Метод (IntPtr)

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

6 голосов
/ 14 января 2014

Приведенный выше ответ был отличным, и он почти решил ту же проблему для меня, но ... я получил то, что похоже на китайские иероглифы, из метода (()慮 敭> 䌢 ⸢).Мне нужно было использовать метод Marshal.PtrToStringAnsi (IntPtr), как описано здесь: http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.ptrtostringansi.aspx и здесь: http://answers.unity3d.com/questions/555441/unitys-simplest-plugin-print-does-not-work.html.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...