[英]How can I convert an unmanaged IntPtr type to a c# string?
我是C#的新手(来自原生C ++背景),我正在尝试编写一个小UI来打印Windows广播消息等。 我在我的C#程序中重写了默认的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);
}
我想知道的是,如何获取intPatr类型的lParam对象的字符串表示。 它本质上是C ++领域的一个空白*,我能以某种方式将它转换为C#吗? 据推测,这样做本质上是不安全的。
Marshal.PtrToStringAuto
方法(IntPtr)
分配托管
String
并将存储在非托管内存中的字符串中的所有字符复制到第一个空字符。
上面的答案很棒,几乎解决了同样的问题,但是......我从方法中得到了看起来像汉字的东西(潆湵瑡氠瑳瑳瑳敮条慥慥慥条条条条条敭敭敭敭䌢⸢)。 我必须做的是使用Marshal.PtrToStringAnsi(IntPtr)方法,如下所述: http : //msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.ptrtostringansi.aspx和here: http ://answers.unity3d.com/questions/555441/unitys-simplest-plugin-print-does-not-work.html 。
一旦我做了更改,我的String再次使用英语。 不知道为什么会这样,但是你去了!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.