This post originated from an RSS feed registered with .NET Buzz
by Peter G Provost.
Original Post: Passing Function Pointer to SendMessage with P/Invoke
Feed Title: Peter Provost's Geek Noise
Feed URL: /error.aspx?aspxerrorpath=/Rss.aspx
Feed Description: Technology news, development articles, Microsoft .NET, and other stuff...
I decided to try sorting the list before tackling positions. From my Win32 and MFC
days, I knew exactly how to do this. Or so I thought.
As soon as I tried to pass a delegate as the LPARAM of SendMessage, I started crashing
the Explorer.exe process. Does anyone out there know what is wrong with this code?
public delegate int CompareFunc(int lParam1, int lParam2, int lParamSort);
[DllImport("user32.dll", EntryPoint="SendMessage")]
public static extern int SendMessage(IntPtr hWnd, uint Msg, uint wParam, [MarshalAs(UnmanagedType.FunctionPtr)]
CompareFunc compareFunc);
[DllImport("user32.dll",EntryPoint="FindWindow")]
private static extern int FindWindow(string _ClassName, string _WindowName);
[DllImport ("user32.dll")]
public static extern IntPtr GetWindow( IntPtr handle, int cmd );
private void button1_Click(object sender, System.EventArgs e)
{
// const int LVA_DEFAULT = 0x0000;
const int LVM_FIRST = 0x1000; // ListView messages
// const int LVM_ARRANGE = (LVM_FIRST + 22);
const int LVM_SORTITEMS = (LVM_FIRST + 48);
const int GW_CHILD = 5;