我想在我的C#应用程序中使用WinApi函数ComboBox_SetCurSel
。
为此,我插入以下声明:
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr ComboBox_SetCurSel(IntPtr hWnd, int index);
当我运行程序时,我收到错误
EntryPointNotFoundException ComboBox_SetCurSel user32.dll
Message=Can't find entry point "ComboBox_SetCurSel" in DLL "user32.dll".
我认为此错误是由ComboBox_SetCurSel
不在user32.dll
中,而是在其他DLL中引起的。
如果这是正确的,要解决此错误,我需要更改DllImport
声明。
问题:ComboBox_SetCurSel
位于哪个DLL中?
答案 0 :(得分:2)
这实际上不是一个功能。它是一个宏,来自WindowsX.h:
#define ComboBox_SetCurSel(hwndCtl, index) ((int)(DWORD)SNDMSG((hwndCtl), CB_SETCURSEL, (WPARAM)(int)(index), 0L))
SNDMSG是SendMessage的地方。换句话说,你应该这样做:
[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, Int32 wParam, Int32 lParam);
SendMessage(hWnd, 0x14E, (Int32)index, 0);
答案 1 :(得分:2)
答案 2 :(得分:1)
ComboBox_SetCurSel是宏,你不能在C#中使用它。使用CB_SETCURSEL消息调用SendMessage API:http://msdn.microsoft.com/en-us/library/windows/desktop/bb775899%28v=vs.85%29.aspx
这是SendMessage API声明:http://www.pinvoke.net/default.aspx/user32/SendMessage.html