I'm new to C# (from a native C++ background) and I'm trying to write a little UI to print windows broadcast messages among other things. I've overridden the default WndProc message loop in my C# program like so:
[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);
}
What I'd like to know, is how to obtain a string representation of the lParam object which is of type IntPtr. It's essentially a void* in C++ land, can I cast it inside C# somehow? Presumably doing so is inherently unsafe.
Marshal.PtrToStringAuto
Method (IntPtr)
Allocates a managed
String
and copies all characters up to the first null character from a string stored in unmanaged memory into it.
The above answer was great and it nearly solved the same issue for me but... I got what looks like Chinese characters back from the method (潆湵瑡氠慥瑳漠敮爠灥慥整浩条慮敭›䌢⸢). What I had to do was use the Marshal.PtrToStringAnsi(IntPtr) method as described here: http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.ptrtostringansi.aspx and here: http://answers.unity3d.com/questions/555441/unitys-simplest-plugin-print-does-not-work.html.
Once I made the change, my String was in English once more. Not sure why that was happening, but there ya go!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With