2

GetAsyncKeyState()使用している APIをインポートするには:

[DllImport("user32.dll")]
public static extern short GetAsyncKeyState(int vKey);

すべての Web ページで同じコードが得られますが、コンパイラをコンパイルしようとすると、次のようにスローされます。

期待されるクラス、デリゲート、列挙型、インターフェイス、または構造体
修飾子 'extern' は、このアイテムに対して無効です

コマンド ラインで直接コンパイルしていますが、Visual C# でも同じエラーがスローされます。それでは、関数をインポートする正しい方法はどれですか?

4

2 に答える 2

6

これは、宣言をコードの間違った場所に置いていることを意味します。次のように、クラス内にある必要があります。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

// not here

namespace WindowsFormsApplication1
{

    // not here

    public partial class Form1 : Form
    {

        // put it INSIDE the class

        [DllImport("user32.dll")]
        public static extern short GetAsyncKeyState(int vKey);

        public Form1()
        {

            // not inside methods, though

            InitializeComponent();
        }

    }

}
于 2013-11-09T20:41:35.273 に答える
4

コンパイラによって発生したエラーは明らかです。その宣言をクラス内に配置する必要があります。

namespace MyNameSpace
{
   public class MyClass
   {
      [DllImport("user32.dll")]
      public static extern short GetAsyncKeyState(int vKey);
   }
}

ここでexternは、キーワードのリファレンスを見つけることができます

于 2013-11-09T20:40:38.557 に答える