Как объявить следующее, используя метод PInvoke? - PullRequest
1 голос
/ 07 февраля 2012

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

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

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

Ответы [ 4 ]

2 голосов
/ 07 февраля 2012

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

enter image description here

 /// <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, является действительным.

1 голос
/ 07 февраля 2012

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

System.Windows.MessageBoxResult
0 голосов
/ 07 февраля 2012

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

0 голосов
/ 07 февраля 2012

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

using System.Windows;
...