在C#中,extern
關鍵字用于聲明一個方法是在其他地方(例如DLL)實現的,而不是在當前的代碼文件中。這種方法通常用于調用非托管代碼或與其他庫交互。下面是一個簡單的extern
案例分析:
假設我們有一個名為NativeLibrary
的DLL,其中包含一個名為AddNumbers
的方法,該方法接受兩個整數參數并返回它們的和。我們的目標是使用C#調用這個AddNumbers
方法。
首先,我們需要創建一個C++ DLL項目來包含AddNumbers
方法的實現。這個項目將生成一個名為NativeLibrary.dll
的文件。
// NativeLibrary.cpp
#include <iostream>
extern "C" {
int AddNumbers(int a, int b) {
return a + b;
}
}
注意:這里使用了extern "C"
來防止C++的名稱修飾(name mangling),這樣C#就可以直接調用這個方法。
使用適當的C++編譯器編譯上面的代碼,生成NativeLibrary.dll
。
接下來,我們創建一個新的C#控制臺應用程序項目,并使用DllImport
屬性來聲明對NativeLibrary.dll
中AddNumbers
方法的引用。
using System;
using System.Runtime.InteropServices;
class Program
{
[DllImport("NativeLibrary.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern int AddNumbers(int a, int b);
static void Main()
{
int result = AddNumbers(3, 4);
Console.WriteLine("The sum is: " + result);
}
}
在這個例子中,DllImport
屬性用于指定DLL的名稱、要調用的方法名以及調用約定。CallingConvention.Cdecl
指定了方法的調用約定,這是根據DLL中的實現來確定的。
最后,編譯并運行C#程序。你應該會看到輸出“The sum is: 7”,這表明AddNumbers
方法已成功從DLL中被調用。
通過使用extern
關鍵字和DllImport
屬性,我們可以在C#中調用其他DLL中的方法。這在需要與其他語言編寫的代碼交互或訪問非托管資源時非常有用。