如何使用PInvoke方法声明以下内容?

时间:2012-02-07 13:51:04

标签: c# .net c++-cli pinvoke

对于简单的Messagebox,检查http://pinvoke.net/,我得到了

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

但是无法找到编译器报告的MessageBoxResult。如果我将MessageBoxResult更改为int,那么它编译得很好。关于这个问题的任何提示?

4 个答案:

答案 0 :(得分:2)

该定义也在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
 }

但正如其他人提到的,请始终检查on MSDN pinvoke.net给出的值是否有效。

答案 1 :(得分:1)

MessageBoxResult在这里定义:

System.Windows.MessageBoxResult

答案 2 :(得分:0)

添加

using System.Windows;

答案 3 :(得分:0)

如果查看the MSDN page for the function,您会看到它确实返回一个int,这是本机返回类型。我怀疑pinvoke.net正在使用MessageBoxResult来掩盖它,虽然他们的页面在两个地方提到该函数返回一个int(在messageboxresult下面,它表示“uint 0-6”,后来在示例中他们写了作为返回int)的函数。我建议只使用一个int并处理它(或者如果可能的话转换为DialogResult)。