導航:首頁 > 源碼編譯 > dll怎麼編譯成品

dll怎麼編譯成品

發布時間:2022-08-30 16:14:08

⑴ DLL文件編譯,高手請指教。

DLL文件即動態鏈接庫文件,是一種可執行文件,它允許程序共享執行特殊任務所必需的代碼和其他資源。Windows提供的DLL文件中包含了允許基於Windows的程序在Windows環境下操作的許多函數和資源。

DLL多數情況下是帶有DLL擴展名的文件,但也可能是EXE或其他擴展名。它們向運行於Windows操作系統下的程序提供代碼、數據或函數。程序可根據DLL文件中的指令打開、啟用、查詢、禁用和關閉驅動程序。

DLL的全稱是Dynamic Link Library, 中文叫做「動態鏈接文件」。在Windows操作系統中, DLL對於程序執行是非常重要的, 因為程序在執行的時候, 必須鏈接到DLL文件, 才能夠正確地運行。而有些DLL文件可以被許多程序共用。因此, 程序設計人員可以利用DLL文件, 使程序不至於太過巨大。但是當安裝的程序越來越多, DLL文件也就會越來越多, 如果當你刪除程序的時候, 沒有用的DLL文件沒有被刪除的話, 久而久之就造成系統的負擔了。

DLL是動態連接庫。使用動態連接庫的一些好處是:
1.多個應用程序共享代碼和數據:比如Office軟體的各個組成部分有相似的外觀和功能,這就是通過共享動態連接庫實現的。
2.在鉤子程序過濾系統消息時必須使用動態連接庫。
3.動態連接庫以一種自然的方式將一個大的應用程序劃分為幾個小的模塊,有利於小組內部成員的分工與合作。而且,各個模塊可以獨立升級。如果小組中的一個成員開發了一組實用常式,他就可以把這些常式放在一個動態連接庫中,讓小組的其他成員使用。
4.為了實現應用程序的國際化,往往需要使用動態連接庫。使用動態連接庫可以將針對某一國家、語言的信息存放在其中。對於不同的版本,使用不同的動態連接庫。在使用AppWizard生成應用程序時,我們可以指定資源文件使用的語言,這就是通過提供不同的動態連接庫實現的。
VC++、C++ Builder、Delphi都可以編寫DLL文件。Visual Basic 5.0以上版本也可以編寫一種特殊的DLL,即ActiveX DLL。

DLL不是獨立運行的程序,它是某個程序的一個部分,它只能由所屬的程序調用。用戶不能,也不需要打開它。

⑵ C# dll編譯問題

這個只有三樓說對了!

事實上我們在引用時自己開發的dll時存在兩種引用方式:

  1. 引用時選擇的是項目(dll項目也在項目資源管理器中),這里引用最直接,原則上是使用這種引用的方式。

  2. 引用時選擇的是文件(直接引用了文件夾中指定的dll),這里引用其實一般用於不一個項目資源管理器時的使用(因為這個dll的源碼你無法拿到,或者為了不允許你更改,要求你引用文件而不是項目)

當然,如果條件允許,引用前可以在資源管理器先添加已存在的項目(當然是你要引用的那個項目),然後按第一種引用方式引用!

兩種引用方式有一定的區別:

引用項目其實是在項目資源管理器中形成一個依賴關系,這個可以在項目管理管理器上右面查看項目依賴關系(不是在項目上右擊,不是在項目上右擊,不是在項目上右擊,重要的事說三遍,因為很多人連項目與項目資源管理器都沒分清!)正是因為有這個項目依賴的關系,所以IDE在編譯時會按照依賴關系進行生成——也就是說被引用項目要比引用項目先生成!當然了,我見過一些「牛X"程序員把自己項目中亂寫一通,最後形成了一個環狀引用,還告訴我說找到了vs的bug,項目生成失敗,而且無解!汗了~~自己原理不清楚,你以為臭蟲那麼好捉?

之所以這么說,就是因為其實你每次生成時,由於依賴關系的原因,引用的永遠是最後的dll,不管是有人解釋為「所有項目重新生成了,所以能引用到最新的」,還是解釋為「直接引用了被引用項目bin中的文件」,還是解釋為「通知了依賴項項目更新引用文件」等等不影響你使用的,而且在被引用生成之後,其他的引用都是新的。

第二種其實是引用了一個副本文件!不管你在不在同一項目資源,只要是直接引用文件的這種,都實都是將文件到了object文件夾中,而這個文件夾的文件在生成時會生成到bin文件夾中!也有人理解為到了bin文件夾中,但是他們搞不清楚——類似於以上文件明明引用源中的dll已經更新,而bin中的怎麼還是舊文件呢?其實文件引用方式是引用到項目中一個中間文件中了,這個文件並沒有在vs上顯示(文件組中存在,有些還是隱藏的),眾所周知的是bin只有在編譯的時候才會生成,所以很多人會以為源dll文件也是此時生成的,事實上根本上不是!而是你在引用時已經將文件到了隱藏的目錄中!在生成時再將其到bin中!所以即引源文件夾的內容已經改變,這個文件也不會再發生錯誤了!如果這樣理解了,那麼樓主的問題就已經知道原因了!

如果是項目引用,不用管的,引用的永遠是最新的dll!

如果是文件引用,在dll更新時,應該在項目中引用文件夾中找到文件,然後右擊「刷新引用」即可!這個方式相當於再次從將源dll 到中間object目錄中。當然,開發過程中使用的就是新的dll了!另一種方式更絕,就是刪除引用文件,重新引用(這絕對可行,但怎麼也不那麼優雅,人家原因的dll位置又沒換)!

如果讓我根據樓主的描述,我猜你使用的也是文件引用方式!那麼知道文件引用方式,怎麼解決就不成問題了!

你一定奇怪,為什麼還要有文件引用方式?我想引用哪個直接把那個項目添加到我的項目資源管理器中不就行了?就算兩台機器上,一個dll也是,把整個的項目拷貝過來不也行嗎(大多時候我們使用TFS時,可以直接將項目拉回來的)?為什麼會存在這樣文件引用呢?它的作用就為了解決我們拿不到源碼無法添加到項目中而出現的引用方式嗎?答案是肯定的,但只是一部分原因!我來告訴你另一部分的原因!

Fake!Fake!Fake! 如果你懂這個單詞,那麼一定知道我的意思,如果不懂我來告訴你吧,這個單詞就是「假的」!如果dll開發是一個任務(develop task), 而引用該dll的應用軟體或中間件也是一個任務(delevop task),在正常的開發關繫上來說,dll開發任務是應用開發的前驅,也就是正常的需要dll開發完成後才進行應用軟體的開發(很多人的模式都是這樣的),但現在情況是,dll開發需要5天,而應用開發也需要5天,產品卻要7天內交付!那麼是說兩個任務要同時進行develop! 怎麼辦?怎麼辦?應用開發程序員卻說你沒dll讓我怎麼引用——聽起來很有道理,不少管理者向dll開發team壓壓力,你們在兩天內加班完成,我給你們放5天假!事實上兩天內加班完成的dll其實質量可想而知!為什麼不Fake呢!

Fake的意思就是應用開發人員引用一個「假的」dll! 標記為Fake的引用文件非常好玩——你可以在開發中試一下!它只需要在成品是組合一下就可以了(因為引用文件會使用其文件的版本/哈希值/空間等相關校驗,而這個即更是更新後的文件也存在有些值不一樣——如publicToken值,而引用Fake則就是解決了這個問題)!

所以說文件引用的方式同時還是打破任務前驅方式的一種行為,有利於扁開化安排開發時間!所以文件引用也存在其實必要的因素!

  1. 無源碼時的引用(只提供了dll沒提供源碼),比如某些SDK等,一般用於穩定的成熟的,基本上更新不大的dll文件使用。

  2. 分支版本控制(由於開發過程中存在諸多的分支版本)應用程序員無法分清楚或不需分清楚分支版本時,引用源碼則會對應用開發造成一定的混淆,當然在dll開發立場上他們當然知道該用哪個版本的源碼,對於應用開發的team,沒有必要增加他們學習時間。各版本的區別他們並不知道細節。

  3. Fake引用!並行開發成為可能性(雖然可以引用另一個團隊的dll源碼,如果你願意每次生成時都更新他們的源碼——他們有可能同時在改動,還要以無比的關愛來忍受他們的千奇百怪的bug的話,我同意,當然還得忍受這種原因導致你自己的進度緩慢)。

也正是因為如此,所以文件引用可能會出現的現象要知道怎麼處理。

⑶ 易語言 如何把dll文件編譯到EXE(如圖)

易語言有一個可以添加DLL命令的地方,只要你的命令介面沒有變,裡面的函數隨你改

修改窗口屬性也一樣,將你的窗口句柄傳過去,根據句柄該窗口組件屬性的方法就很多了,

如果你的DLL也是使用易語言寫的話那就更簡單了,
直接定義一個變數類型為窗口

.版本 2
.子程序 ABC, , 公開
.參數 要修改的窗口, 窗口
要修改的窗口.左邊 = 0
要修改的窗口.高度 = 500

⑷ 如何編譯DLL文件

好了 怎麼給你?郵箱?

⑸ 如何編譯64位dll程序,有幾種情況,在32位XP上用VC++6.0或者VS2010該怎麼編譯64位的dll。

在64位的操作系統上用vs軟體編譯的dll默認就是64位。
在32位XP上用VC++6.0編譯64位的dll,需要安裝sdk(最新版本是sdk2003),在開始菜單——sdk——open build environment window——windows server 2003 64-bit build environment——set win svr 2003 x64 build env進入命令行,從命令行調用msdev,將vc選項里的include和lib的第一個默認路徑設為sdk目錄下64位頭文件和庫的路徑,編譯出的dll似乎就是64位的了。這個是從網頁上看到的,沒實踐過。
在32位XP上使用vs2010就簡單多了,新建一個項目(解決方案),加入代碼,設置X64,編譯生成即可。

⑹ 怎樣可以將DLL編譯到EXE文件里

添加一個自定義資源類型,指向該文件即可。運行時可以利用資源管理函數把資源存到Windows的臨時目錄,文件名稱越怪越好,不需要和原來的文件名一樣。利用loadLibrary和GetProcAddress,調用函數,最後刪除臨時文件,毀屍滅跡。如果你熟悉DLL動態延遲載入,那將是再好不過。 相關文章可以參考Windows Deveoper Magazine中 2002.7 這篇文章講述了如何把DLL打包到一個EXE文件中,如何把它存到一個臨時的不為人所知目錄,如何動態延遲載入這個動態連接庫(注意動態延遲載入用的是是靜態連接,不需要調用loadLibrary和GetProcAddress函數,但在編譯時需要指定編譯選項你可以參考《Windows核心編程》參考關於DLL延遲載入的描述)。程序函數調用完畢程序退出前可以神不知鬼不覺地把文件刪除。做到踏雪無痕。

⑺ 如何把dll文件反編譯修改之後的文件編譯成dll

你在你的solution中新建一個工程,然後把a.cs,b.cs,c.cs添加到這個工程裡面(我建議你新建類,然後把類的代碼過去,這樣即使命名空間不同也不會造成混亂)
然後再你引用的工程里addreference->project->你新建的這個工程,就可以調用了.
這樣如果你需要修改的話直接在ide里修改,可以實時看到效果

⑻ DLL文件是怎樣生成的

由編譯器編譯源代碼生成的啦。在開發軟體的時候,把那些常用的方法,組織在一個類裡面編譯成dll文件,方便以後調用呢

⑼ C#中怎麼將dll靜態編譯到exe中

在項目欄裡面有個引用文件夾,右鍵點擊文件夾,添加應用,在提示欄里上方標簽點擊
瀏覽
,選擇dll路徑即可,前提是dll沒有加殼。
這只是項目里引用,你如果要在代碼里用dll的方法(函數),先用對象瀏覽器(工具欄里有)查看dll里的類,當然,如果是你自己編的dll就不用了,再在代碼源文件頭加using
XXX(類別名稱);即可。
提醒下~你編譯出的exe如果要移動或打成安裝包,dll要一起。

⑽ 一個應用程序里有很多DLL是怎麼編譯出來的

DLL就是功能獨立出來的軟體包,主要就是為了實現程序功能模塊的分割,一個DLL可以同時在系統中被多個EXE進程映射,而時間上在內存中的拷貝只有一份。
DLL和EXE一樣都是PE文件。

比如你的控制台程序(EXE的)要引用第三方的軟體包,你就 可以將他們提供的lib文件加入到你的程序中,使用「#pragram comment(lib,"xxx.lib") 」——如果對方提供有.h文件,也要將其在包含在cpp的前面,或者延遲載入「LoadLibrary / GetProcAddress / FreeLibray 」,

自己也可以做個dll,導出函數、類、變數,等

任何一個程序都默認包含了系統的幾個dll庫文件。

閱讀全文

與dll怎麼編譯成品相關的資料

熱點內容
解除電腦加密文件夾 瀏覽:358
androidcheckbox組 瀏覽:546
linux在線安裝軟體 瀏覽:823
如何設置手機安卓版 瀏覽:285
簡歷pdfword 瀏覽:123
鋒雲視頻伺服器網關設置 瀏覽:162
linux伺服器如何查看網卡型號 瀏覽:142
加密相冊誤刪了怎麼恢復 瀏覽:380
安卓代練通怎麼下載 瀏覽:518
知道域名如何查詢伺服器 瀏覽:906
方舟手游怎麼才能進伺服器 瀏覽:289
抖音演算法自動爆音 瀏覽:24
linux修改網卡配置 瀏覽:913
雲伺服器和本地伺服器數據 瀏覽:843
在家如何創業python 瀏覽:225
編譯原理好課 瀏覽:716
python中實數的表示 瀏覽:371
php下載中文名文件 瀏覽:351
哪裡有專門注冊app實名的 瀏覽:273
魔爪mx穩定器app去哪裡下載 瀏覽:469