簡體   English   中英

導入DLL時,為什么必須將方法聲明為靜態和外部?

[英]When Importing a DLL Why Do Methods Have To Be Declared Static and Extern?

正如標題所要求的那樣,當您導入諸如User32.dll之類的DLL並聲明要在該DLL上調用方法的方法時,為什么需要將這些方法聲明為Static和Extern。

IE,這取自另一個StackOverflow答案,但演示了我的要求。

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, UIntPtr dwExtraInfo);

static -由於它們不需要類的實例,因此這些方法被調用到系統API,並且不需要任何初始化,可以在靜態/非靜態塊中使用

extern -extern修飾符用於聲明在外部實現的方法。 由於API方法未在類文件本身中聲明,因此extern告訴編譯器該方法在別處聲明。

雖然我真的不知道是否有技術細節,但是我說原因是:

靜態的
駐留在外部DLL中的方法不能綁定到任何對象實例。 如果將它們綁定到對象實例,則DLL將必須跟蹤每次實例都在調用該方法。

EXTERN
我猜這只是一個關鍵字,告訴編譯器插入用於綁定DLL的代碼,而不是期望該方法在C#中實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM