1

ComboBox_SetCurSelC# アプリケーションで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".

このエラーは、ではなく、他の DLL にComboBox_SetCurSel配置されていることが原因であると思われます。user32.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 に答える