如何理解C 載入DLL的順序

2025-01-10 04:45:18 字數 3337 閱讀 7738

c#程式的載入過程?

1樓:網友

1、使用者執行乙個。net程式集;

2、windows載入器檢視addressofentrypoint域,並找到pe映像檔案的。text段;

3、位於addressofentrypoint位置上的位元組只是乙個jmp(跳轉)指令,這個指令跳轉到中的乙個匯入函式;

4、將執行控制轉移到中的_corexemain中,這個函式將啟動clr並把執行控制轉移到程式集的入口點。

2樓:草薙在

windows程式先會走正常的win32載入然後看到pe頭會知道是個。net程式,載入。net執行環境然後把exe程式集裝到執行環境裡。

如果需要的話就即時編譯。

執行簡單講是這樣。

c# 中如何呼叫dll檔案?

3樓:網友

樓主你的標題有誤導人的嫌疑呀。呵呵。

我幫你解釋一下吧,你這裡的呼叫dll用詞不準。

在。net平臺上,呼叫dll檔案有2種含義。

1、呼叫託管dll,即你使用。net平臺開發的dll,屬於託管**。

2、呼叫非託管dll,即傳統的dll,一般是c++,vb,delphi等等開發出來的,屬於非託管**。

從你的意思中看出來你現在是呼叫託管的dll,方法是 「在解決方案管理器」 -解決方案」(或專案) 中的任意地方, 右鍵「新增引用」,「瀏覽」,選擇你需要呼叫的dll檔案,確定即可,該dll會自動複製到bin目錄,打包時也會自動複製到你釋出的地方。

新增完了引用,現在如何呼叫呢?

如果有名稱空間則引入名稱空間,比如你的裡面,是a名稱空間,有乙個b類,然後有乙個無引數靜態方法c

那麼呼叫方法就是,跟你普通的使用類是一樣的。

然後是非託管dll

需要新增dll的名稱,以及方法,也就是你所用到的dll的每個方法都需要新增一次,dllimport("")]

public static extern int puts(string c);

你這點分數對不住我乙個乙個敲出來的字啊。

c#中如何動態載入和解除安裝dll

4樓:安

在c#中我們也能使用實現動態載入dll,但是當你試圖解除安裝時,你會很驚訝的發現assembly沒有提供任何解除安裝的方法。這是由於託管**的自動垃圾**機制會做這件事情,所以c#不提供釋放資源的函式,一切由垃圾**來做。

powered by 25175.

net這引發了乙個問題,用assembly載入的dll可能只在程式結束的時候才會被釋放,這也意味著在程式執行期間無法更新被載入的dll。而這個功能在某些程式設計時是非常必要的,考慮你正在用反射機制寫乙個檢視dll中所有函式詳細資訊的程式,程式提供乙個選單讓使用者可以選擇dll檔案,這時就需要讓程式能夠解除安裝dll,否則一旦使用者重新得到新版本dll時,必須要重新啟動程式,重新選擇載入dll檔案,這樣的設計是使用者無法忍受的。

"dll unload test");proxyobject obj = (proxyobject),"test","");}publicboolinvoke(stringfullclassname,stringmethodname,paramsobject args)}}注意:

5樓:網友

1、利用反射進行動態載入和呼叫。

assembly assembly=; //利用dll的路徑載入,同時將此程式集所依賴的程式集載入進來,需後輟名。dll

只載入指定檔案,並不會自動載入依賴程式集。無需後輟名2、載入dll後,需要使用dll中某類。

type type=;//用型別的名稱空間和名稱獲得型別3、需要例項化型別,才可以使用,引數可以人為的指定,也可以無引數,靜態例項可以省略。

object obj = ,params);//利用指定的引數例項話型別。

4、呼叫型別中的某個方法:

需要首先得到此方法。

methodinfo mi=;//通過方法名稱獲得方法5、然後對方法進行呼叫,多型性利用引數進行控制,params);//根據引數直線方法,返回值就是原方法的返回值。

c# 如何呼叫dll檔案中的某個方法

6樓:網友

你能做這些後,那還不簡單,在你要使用的地方:

假如該函式返回值是乙個字串。

string stra= 即可啊。

7樓:戰神火車頭

一般情況 ,你只需要在寫**的時候鍵入「就可以了。

8樓:網友

using mvision;是名稱空間。 名稱空間下可能有乙個或多個類class。

類裡邊有方法。假如方法是靜態方法static那就直接用類名呼叫方法。

如果不是靜態方法,那就例項化類new然後呼叫方法。

9樓:

首先請確認你的 getpicture 是靜態方法還是例項方法。靜態方法用類名。方法,進行呼叫。

其次請按照下面步驟進行呼叫:

1)新增引用dll //這個你已經實現了 ,而dll的名稱mvision正是getpicture方法所在類的名稱空間的名稱。

2)using mvision; // 你已經實現,引用getpicture方法所在類的名稱空間。

3)嘗試在你的方法內部這樣使用:

a) 對於靜態方法:

mvision.類。getpicture // 由於不知道mvision下面有哪些類有getpicture 方法,所以你要去乙個個類檢視是否包含getpicture 方法。

b) 對於例項方法 則 先例項化此類,再呼叫。

mvision.類 classinstance= new mvision.類();

如何在c#中呼叫c++封裝的dll?

10樓:陽光的雷咩咩

用dllimport屬性指明dll的位置,宣告類似的方法即可,請參照如下鏈結的大量示例格式。

順便給你看我自己寫的**,你自己試試就知道了。

public partial class form1 : formpublic form1()

private void button1_click(object sender, eventargs e)}

11樓:蘿莉控

dll本身不能直接執行是沒有main函式的。因為你是封裝了給c#呼叫,建議你還是找一本書仔細看兩個問題:

1)如何編寫dll

2) c#和c++之間資料型別的對應關係,否則你無法傳遞引數的。

dll不是新技術,可以找到很多這樣的書。

希望對你能有所幫助。

C 編譯的DLL在C中引用後,如何顯示DLL中的註釋內容

如果c 寫的是標準com介面動態庫,就可以用 helpstring 關鍵字在idl檔案中寫入相應的註釋。註釋是不會編譯到 裡面的 託管的還是非託管的dll?c 引用.dll檔案後,如何顯示dll裡方法的解釋 開啟microsoft visual studio 2010,新建 windows窗體應用程...

為什麼我的電腦老是「載入dll是出錯」

登錄檔修改法 開始 執行 處輸入 regedit 在 hkey current user software microsoft windows currentversion run 中,右邊視窗找到殘留的程式名刪除。或者開啟登錄檔編輯器 在編輯 查詢中,輸入出錯檔名,把搜到的刪除,按f3鍵,搜尋下一...

C呼叫C寫的dll,建構函式出問題

i不應該是這樣嗎?data dwr new data abc efg public data string dbname,string tname 加個public c 呼叫dll的問題。這個問題困擾我很久了!我寫了個一個測試,你看看的 首先是a.dll,我用的是def匯出,你也可以用declspe...