次の方法で共有


extern (C# リファレンス)

更新 : 2007 年 11 月

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

[DllImport("avifil32.dll")]
private static extern void AVIFileInit();
e59b22c5.alert_note(ja-jp,VS.90).gifメモ :

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

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

e59b22c5.alert_note(ja-jp,VS.90).gifメモ :

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(int h, string m, string c, int type);

    static int Main()
    {
        string myString;
        Console.Write("Enter your message: ");
        myString = Console.ReadLine();
        return MessageBox(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));
   }
}

SampleMethod() returns 50.

解説

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

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

    cl /LD Cmdll.c

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

    csc CM.cs

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

C# 言語仕様

詳細については、「C# 言語仕様」の次のセクションを参照してください。

  • 10.6.7 外部メソッド

参照

概念

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

参照

C# のキーワード

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

System.Runtime.InteropServices.DllImportAttribute

その他の技術情報

C# リファレンス