共用方式為


extern (C# 參考)

extern 修飾詞是用來宣告於外部實作的方法。 extern 修飾詞的常見用法,是在使用 Interop 服務進行 Unmanaged 程式碼呼叫時,搭配 DllImport 屬性使用。 在此情況下,此方法也必須宣告為 static,如下列範例所示:

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

extern 關鍵字也可以定義外部組件別名,這樣就能從單一組件中參考相同元件的不同版本。 如需詳細資訊,請參閱 外部別名 (C# 參考)

同時使用 abstract 和 extern 修飾詞修改同一個成員是錯誤的用法。 使用 extern 修飾詞表示方法是在 C# 程式碼外部實作,而使用 abstract 修飾詞則表示類別中並未提供該方法實作。

extern 關鍵字在 C# 中的使用方式比在 C++ 中受到更多限制。 若要比較 C# 關鍵字與 C++ 關鍵字,請參閱<使用 extern 在 C++ 語言參考中指定連結>。

範例

範例 1:在這個範例中,程式會接收來自使用者的字串並且在訊息方塊內顯示該字串。 程式會使用從 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);
        }

    }

範例 2:這個範例將示範呼叫 C 程式庫 (原生 DLL) 的 C# 程式。

1. 請建立下列 C 檔案並將它命名為 cmdll.c:

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

2. 從 Visual Studio 安裝目錄開啟 Visual Studio x64 (或 x32) Native Tools [命令提示字元] 視窗,並在命令提示字元中輸入 cl /LD cmdll.c 來編譯 cmdll.c 檔案。

3. 在相同的目錄中,建立下列 C# 檔案並將它命名為 cm.cs:

// 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));
   }
}

3. 從 Visual Studio 安裝目錄開啟 Visual Studio x64 (或 x32) Native Tools [命令提示字元] 視窗,並輸入下列內容來編譯 cm.cs 檔案:

csc cm.cs (適用於 x64 命令提示字元) - 或 -csc /platform:x86 cm.cs (適用於 x32 命令提示字元)

這樣將會建立可執行檔 cm.exe。

4. 執行 cm.exe。 SampleMethod 方法會將值 5 傳遞至 DLL 檔案,並傳回乘以 10 的值。程式會產生下列輸出:

SampleMethod() returns 50.

C# 語言規格

如需詳細資訊,請參閱<C# 語言規格>。語言規格是 C# 語法及用法的限定來源。

請參閱

參考

C# 關鍵字

修飾詞 (C# 參考)

DllImportAttribute

概念

C# 程式設計手冊

其他資源

C# 參考