Как объявить следующее с помощью метода PInvoke?

Для простого окна сообщений, проверяя http://pinvoke.net/, я получаю

[DllImport("user32.dll")]
static extern MessageBoxResult MessageBox(IntPtr hWnd, string text, string caption, int type);

Однако компилятор сообщает, что MessageBoxResult не может быть найден. Если я изменю MessageBoxResult на int, то компилируется нормально. Любая подсказка об этой проблеме?


person user705414    schedule 07.02.2012    source источник
comment
Поскольку этот метод возвращает int.   -  person Joe    schedule 07.02.2012


Ответы (4)


Определение также дается на pinvoke.net:

введите здесь описание изображения

 /// <summary>
 /// Represents possible values returned by the MessageBox function.
 /// </summary>
 public enum MessageBoxResult : uint
 {
     Ok = 1,
     Cancel,
     Abort,
     Retry,
     Ignore,
     Yes,
     No,
     Close,
     Help,
     TryAgain,
     Continue,
     Timeout = 32000
 }

Но, как уже упоминалось, всегда проверяйте в MSDN, что значение, данное pinvoke.net, является допустимым.

person ken2k    schedule 07.02.2012

MessageBoxResult определяется здесь:

System.Windows.MessageBoxResult
person Ignacio Soler Garcia    schedule 07.02.2012
comment
Как узнать, где определен MessageBoxResult? - person user705414; 07.02.2012
comment
Перейдите в View -> Object Browser и введите MessageBoxResult в поле поиска. Кстати, это лучший вопрос, если вы спросите меня. - person Ignacio Soler Garcia; 07.02.2012

Просто добавь

using System.Windows;
person Stu    schedule 07.02.2012

Если вы посмотрите на страницу MSDN для функции вы увидите, что она возвращает int, это собственный тип возвращаемого значения. Я подозреваю, что pinvoke.net замалчивает это с помощью MessageBoxResult, хотя на их странице в двух местах упоминается, что функция возвращает int (прямо под messageboxresult написано «uint 0-6», а позже в примере они пишут функцию как возвращающую внутр.). Я бы рекомендовал просто использовать int и обрабатывать его (или, если возможно, преобразовать в DialogResult).

person ssube    schedule 07.02.2012