1

我想ComboBox_SetCurSel在我的 C# 应用程序中使用 WinApi 函数。

为此,我插入以下语句:

[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不在 DLL 中user32.dll,而是在其他一些 DLL 中引起的。

如果这是正确的,要修复此错误,我需要更改DllImport声明。

问题:在什么DLL中ComboBox_SetCurSel

4

3 回答 3

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);
于 2012-10-05T06:49:06.077 回答
2

看到这个:

http://msdn.microsoft.com/en-us/library/windows/desktop/bb856484(v=vs.85).aspx

它是一个宏,而不是一个函数。

于 2012-10-05T06:50:05.637 回答
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

于 2012-10-05T06:49:38.757 回答