Не могу сказать наверняка, но одна очевидная возможность состоит в том, что вы работаете на 64-битной машине, а int
неправильный тип для wParam
.Это должно быть 64-битное значение в 64-битном процессе.
Мы также не знаем, как вы объявили SPoint
.Вы должны передать указатель на структуру POINT
.Это не выглядит так, как будто вы сделали это.
Правильная подпись:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(
IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
Ваше редактирование разъясняет, что SPoint
является структурой.Это тогда явно неправильно.Вы можете просто передать SPoint
как параметр out
.Это было бы самое простое решение.
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(
IntPtr hWnd, int Msg, IntPtr wParam, out SPoint lParam);
Если вам нужна более общая SendMessage
подпись, тогда вы должны использовать IntPtr
, как я говорил выше, и использовать Marshal.StructureToPtr
.