在C#中,extern
關(guān)鍵字用于聲明一個(gè)方法是在外部代碼中實(shí)現(xiàn)的。這通常用于調(diào)用非托管代碼(如C++編寫的代碼)或與本地共享庫(如.dll文件)交互。使用extern
時(shí),你需要提供一個(gè)函數(shù)聲明,該聲明指定了方法的名稱、返回類型和參數(shù)列表。然后,你可以在C#代碼中使用這個(gè)聲明來調(diào)用該方法,就像它是在C#中實(shí)現(xiàn)的一樣。
以下是一個(gè)簡單的示例,展示了如何在C#中使用extern
關(guān)鍵字調(diào)用一個(gè)外部方法:
AddNumbers
的方法,該方法接受兩個(gè)整數(shù)參數(shù)并返回它們的和。你可以使用C++/CLI來創(chuàng)建一個(gè)包裝器類,以便在C#中調(diào)用這個(gè)方法。// C++/CLI wrapper class
public ref class MathWrapper {
public:
static int AddNumbers(int a, int b) {
return a + b;
}
};
extern
關(guān)鍵字聲明一個(gè)與MathWrapper::AddNumbers
方法對(duì)應(yīng)的方法。請(qǐng)注意,你需要使用DllImport
屬性來指定共享庫的名稱和位置。using System;
using System.Runtime.InteropServices;
class Program {
// Declare the extern method using P/Invoke
[DllImport("MathLibrary.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int AddNumbers(int a, int b);
static void Main() {
int result = AddNumbers(3, 4);
Console.WriteLine("The sum is: " + result);
}
}
在這個(gè)例子中,DllImport
屬性指定了共享庫的名稱(在這種情況下為MathLibrary.dll
)以及調(diào)用約定(在這種情況下為CallingConvention.Cdecl
)。請(qǐng)確保將共享庫放在C#項(xiàng)目的輸出目錄中,或者提供正確的路徑。
現(xiàn)在,當(dāng)你運(yùn)行C#程序時(shí),它將調(diào)用C++編寫的AddNumbers
方法,并將結(jié)果輸出到控制臺(tái)。