extern (C# リファレンス)

extern 修飾子は、外部で実装されるメソッドを宣言するために使用します。 extern 修飾子は一般に、相互運用サービスを使用してアンマネージ コードを呼び出すときに、DllImport 属性と共に使用します。 この場合、次の例に示すように、メソッドを static として宣言する必要もあります。

[DllImport("avifil32.dll")]
private static extern void AVIFileInit();

注意

extern キーワードでは、外部アセンブリのエイリアスも定義できます。これにより、単一アセンブリ内から 1 つのコンポーネントの複数バージョンを参照できます。 詳細については、「extern エイリアス (C# リファレンス)」を参照してください。

abstract (C# リファレンス) 修飾子および extern 修飾子を一緒に使用して同一のメンバーを修飾するのは、エラーです。 extern 修飾子を使用すると、メソッドが C# コードの外部で実装されていることを意味します。一方、abstract 修飾子を使用すると、メソッドの実装がクラスには用意されていないことを意味します。

注意

extern キーワードの用法は、C++ の場合よりも制限されています。 C++ のキーワードとの比較については、『C++ Language Reference』の「Using extern to Specify Linkage」を参照してください。

使用例

この例では、ユーザーの入力したメッセージがプログラムに受け取られ、メッセージ ボックスに表示されます。 このプログラムは、User32.dll ライブラリからインポートされた MessageBox メソッドを使用します。

    //using System.Runtime.InteropServices;
    class ExternTest
    {
        [DllImport("User32.dll", CharSet=CharSet.Unicode)] 
        public static extern int MessageBox(IntPtr h, string m, string c, int type);

        static int Main()
        {
            string myString;
            Console.Write("Enter your message: ");
            myString = Console.ReadLine();
            return MessageBox((IntPtr)0, myString, "My Message Box", 0);
        }

    }

この例では、次の例で C# プログラム内から起動する C プログラムから DLL を作成します。

// cmdll.c
// Compile with: /LD
int __declspec(dllexport) SampleMethod(int i)
{
   return i*10;
}

この例では、extern を例示するために、CM.cs および Cmdll.c という 2 つのファイルを使用します。 この C ファイルは、例 2 で作成された外部 DLL です。これは C# プログラムで呼び出されます。

// cm.cs
using System;
using System.Runtime.InteropServices;
public class MainClass 
{
   [DllImport("Cmdll.dll")]
   public static extern int SampleMethod(int x);

   static void Main() 
   {
      Console.WriteLine("SampleMethod() returns {0}.", SampleMethod(5));
   }
}
  

解説

プロジェクトをビルドするには

  • Visual C++ のコマンド ラインを使用して、Cmdll.c を DLL にコンパイルします。

    cl /LD Cmdll.c

  • コマンド ラインを使用して CM.cs をコンパイルします。

    csc CM.cs

これで、実行可能ファイル CM.exe が作成されます。 このプログラムが実行されると、SampleMethod が値 5 を DLL ファイルに渡し、DLL は渡された値に 10 を乗算した値を返します。

C# 言語仕様

詳細については、「C# 言語仕様」を参照してください。 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。

参照

参照

C# のキーワード

修飾子 (C# リファレンス)

System.Runtime.InteropServices.DllImportAttribute

概念

C# プログラミング ガイド

その他の技術情報

C# リファレンス