我需要在C#的Windows API中使用Send_Message()函数。我的一切都很好,除了最后一个参数WPARAM,我在研究中发现它是一个unsigned int。我正在发送0x402消息(SB_GETTEXT),而WPARAM应该表示指向文本将被放置的字符数组的指针。
这是我的代码
unsafe
{
char[] result = new char[40];
int* ptr = (*int)&result;
}
但是我收到以下错误:
Cannot take the address of, get the size of, or declare a pointer to a managed type ('char[]')
是否与'result = new char [40]'部分有关?
感谢。
答案 0 :(得分:1)
我认为你想要的是:
[DllImport("user32.dll")]
static extern IntPtr SendMessage(
IntPtr hWnd,
uint Msg,
long wParam,
[MarshalAs (UnmanagedType.LPStr)] StringBuilder lParam);
请注意,根据the documentation,lParam
是指向字符串的指针,而不是wParam
,正如您的问题所示。
您可能也对pinvoke.net上的说明感兴趣:http://www.pinvoke.net/default.aspx/user32/SB_GETTEXT.html