- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
可以被其他执行档或DLL呼叫
DLL Basics Reference: Programming Applications for Microsoft Windows Fourth Edition p.p. 675 Introduction All the functions in the Windows API are contained in DLLs The three DLLs Kernel32.dll: managing memory, processes, threads User32.dll: user-interface tasks GDI32.dll: drawing image, display text Introduction DLL 為一堆 function 的集合,通常不包含 message-loop 建立視窗 DLL 的 function 可以被其他執行檔或 DLL呼叫 DLL 的執行 使用呼叫者 thread 的 stack 儲存 local variable 記憶體配置, 使用呼叫者 thread的 virtual space 配置 全區域變數與靜態變數: Win98 ? 為每一個process 配置一份複製品 Win2000以後 ? 使用 copy-on-write 策略 要注意的事情 一個Process address space 中,可能包含 執行檔 image + 數個 DLL modules 可能使用 DLL 的 module : 有些 modules 使用 C++ run-time library 有些使用 static 版本的 library 有些 modules 不使用 C++ library 要注意的事情 The Overall Picture 名詞的定義 Executable module ? 從 DLL importing 函式或變數來使用的 module DLL modules ? exporting function 或變數 給 executable module使用的 modules DLL 是如何被建立的 以及如何被應用程式 implicitly link 建立一個最簡單的 DLL Module DLL 可以 export Function, variable 或 C++ class Export Symbol 下面這個檔案,必須被散佈 實作 export 函式 為甚麼要加 extern “C” ? 因為 C++ 編譯器會在 function 前面加上一些修飾(mangle), 這樣會造成 C 程式無法 link 到正確的 function 加入 extern “C” function(); 可以要求編譯器不要加入 mangle 為何 C++ 會對 function name 做 name decoration 呢? Function overloading 與 c++ type-safe linkage 我們來看看差別在哪裡! 使用 MyDLL.dll Copy MyDLL.lib 與 MyDLL.dll到可以搜尋到的地方 __declspec(dllexport) 的意義 . 當 linker 產生 DLL檔時,會 合併上述資訊產生 .lib 檔 並且 embed 一個 symbol table 到 DLL檔中 查閱 DLL 檔所 export 的 symbol – 使用 DumpBin公用程式 使用前,先加入Path,使得相關的DLL檔可以找到 F:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE 執行 DumpBin.exe /exports MyDll.dll 讓其他的IDE 也能使用 Visual C++的DLL 問題是 對於 __stdcall 修飾字的 function,無論是 C/C++, Visual C++ 都會對 function name 加入修飾符號. 讓其他的IDE 也能使用 Visual C++的DLL 解決方案: 要求 VC不要加額外的資訊到DLL中 方法一: 編輯 .def 檔 方法二: 在 DLL原始程式中加入 Import 的實際意義 在使用 DLL import 的symbol 時你可以用 extern 代替 __declspec(dllimport) Import 的實際意義 Linker 發現 __declspec(dllimport) 時, 會在執行檔中的 import section 列出該檔所參考的 symbol 查閱執行檔所需的 symbol 執行 Executable Module 產生你的執行程式 當你的
您可能关注的文档
最近下载
- 中铁隧道集团有限公司工程项目管理考核办法.pdf VIP
- 人教版八年级上册道德与法治全册教学课件.pptx
- 2023年高考语文复习:新高考Ⅰ卷语言文字运用Ⅰ专项练习题(含答案).docx VIP
- 香港朗文英语3a测试卷1-3单元.pdf VIP
- 目前我国国产电动执行器市场分析.pdf VIP
- 附件1:地下车库色彩规划(基础版)(1)(1).pdf VIP
- 健全会计制度声明函.docx VIP
- 通桥[2005]2221-Ⅱ 时速250公里客运专线铁路 有碴轨道后张法预应力混凝土简支箱梁(双线)(跨度31.5m、直、曲线).pdf VIP
- 一建机电实务案例500问.pdf VIP
- 压疮事件原因分析及整改措施.docx VIP
文档评论(0)