




已閱讀5頁,還剩8頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
DELPHI 2010 動態鏈接庫DLL斷點調試馬根峰 ( 廣東聯合電子服務股份有限公司, 廣州 510300)摘要:本文詳細介紹了Delphi 2010中的動態鏈接庫DLL斷點調試技術關鍵詞: DELPHI 2010;Dll斷點調試;1 Delphi 幾個經典版本簡介 Delphi從1995年的 1.0版本,發展到現在的最新的XE3版本,歷經N多版本,但最為經典的幾個版本個人覺得應屬 7.0、2007和 2010。Delphi 7.0應該是Delphi用戶最多的版本。Delphi 2007是功能就不多說了,歸根結底一句話,它是 AnsiString的最后一個版本,在Delphi 2007中,string類型映射為 AnsiString ,char類型映射為 AnsiChar,Pchar類型映射為 PAnsiChar。所以DELPHI低版本的程序可以較輕松地遷移到DELPHI 2007版本。Delphi 2007也是Delphi程序員很容易上手的晚期版本。從Delphi2009開始起,到現在的Delphi XE3為止,都是 unicode 版本。String 類型映射為 UnicodeString 而不是 AnsiString ,Char 類型映射為 WideChar,PChar 類型映射為 PWideChar。 由于Delphi 7.0、2007和 2010在界面上乃至功能上的一些變化,所以在動態鏈接庫DLL斷點調試上,有較大的變化。在今后幾天的時間中,筆者會以三篇文章來分別詳細地介紹Delphi 7.0、2007和 2010這三個版本中的DLL斷點調試技術。本篇文章來詳細地介紹 Delphi 2010中的動態鏈接庫DLL斷點調試技術。2 DELPHI 2010的DLL斷點設置與DLL調試在DELPHI 7.0以及以前的版本中,動態鏈接庫的調試方法如下:點擊菜單Run-Parameters.打開Run Parameters窗口,如圖1所示。 圖1 點擊菜單Run-Parameters.打開Run Parameters窗口設置圖中斷點,然后點擊F9或者RunRun來運行宿主程序Delphi2007_Dll_Debug.exe,但發現斷點無效,如圖2所示:圖2 設置斷點后,運行宿主程序 Delphi2007_Dll_Debug.exe,斷點無效 點擊Project-Options.,在Project Options窗口中,在Delphi CompilerCompiling屬性頁中將Debug information設置為True,如圖3所示:圖3 在Delphi CompilerCompiling屬性頁中將Debug information設置為True點擊Project-Options.,在Project Options窗口中,在Delphi CompilerLinking屬性頁中將Debug information和Include remote debug symbols兩項設置為True,如圖4所示:圖4 將Debug information和Include remote debug symbols兩項設置為True運行宿主程序Delphi2007_Dll_Debug.exe,斷點還是無效,如圖5所示:圖5 運行宿主程序 Delphi2007_Dll_Debug.exe,發現斷點還是無效切換到Delphi的DLL工程文件上,點擊ctrl+alt+M,跳出一個名叫Modules的窗體來。左上角顯示了宿主程序本身及其它所調用的資源。找到動態鏈接庫 Magenf_Detail.dll項,發現目錄沒有指向當前DLL所在的目錄。點擊鼠標右鍵,選中菜單項“Reload Symbol Table”如圖6所示:圖6 打開Modules屬性頁,找到Magenf_Detail.dll項,點擊鼠標右鍵,Reload Symbol Table重新設置動態鏈接庫Magenf_Detail.dll 的位置,選中當前DLL工程Magenf_Detail所在目錄的動態鏈接庫Magenf_Detail.dll文件,如圖7所示:圖7 打開Modules屬性頁,找到Magenf_Detail.dll項,點擊鼠標右鍵,Reload Symbol Table,重新設置它的位置 然后切換到Delphi的屬性頁Magenf_Detail,發現斷點生效,如圖8所示:圖8 點擊屬性頁Magenf_Detail,發現斷點生效在Delphi2007_Dll_Debug.exe,輸入 1和2 后點擊銨鈕“=”,如圖9所示:圖9 在Delphi2007_Dll_Debug.exe,輸入 1和2 后點擊銨鈕“=” 進入DLL斷點調試,如圖10所示:圖10 進入DLL的斷點調試3 例子中的宿主程序及DLL程序代碼-宿主程序代碼-unit UDllDebug;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons, Contnrs , ActiveX, StrUtils ;type TDll_Add=function(int_1,int_2:integer):integer;stdcall; TfrmDllDebug = class(TForm) Edit1: TEdit; Edit2: TEdit; Label1: TLabel; Edit3: TEdit; BtnAdd: TButton; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure BtnAddClick(Sender: TObject); private Private declarations public Public declarations HInst:Thandle; FDll_Add:TFarProc; functionDll_Add:TDll_Add; /aForeThread:MuliThread; end;var frmDllDebug: TfrmDllDebug;implementation $R *.dfm procedure TfrmDllDebug.FormCreate(Sender: TObject);begin hinst:=loadlibrary(Magenf_Detail.dll); if hinst0 then begin FDll_Add:=getprocaddress(hinst,pchar(Dll_Add); if FDll_Addnil then functionDll_Add:=TDll_Add(FDll_Add) else messagedlg(Fatal error! Function not be found!,mtWarning, mbYes, 0) ; end else messagedlg(Fatal error! Magenf_Detail.dll not be found!,mtWarning, mbYes, 0) ;end;procedure TfrmDllDebug.FormClose(Sender: TObject; var Action: TCloseAction);begin try freelibrary(hinst); except end;end; procedure TfrmDllDebug.BtnAddClick(Sender: TObject);var int1,int2,int_return:integer;begin int1:=strToInt(edit1.Text); int2:=strToInt(edit2.Text); int_return:=functionDll_Add(int1,int2); edit3.Text :=intToStr(int_return);end;end.-宿主程序代碼-DLL程序代碼-library Magenf_Detail; Important note about DLL memory management: ShareMem must be the first unit in your librarys USES clause AND your projects (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL-even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters. uses SysUtils,Classes;$R *.RESfunction Dll_Add(int_1,int_2:integer):integer;stdcall;var intS
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東省普寧市勤建學校2024-2025學年高二下學期第二次調研考試政治試題
- 教學課件走進實驗室測量:實驗探究的重要環節
- 2025年阿里3輪面試都問了RecyclerView你都能答出來嗎
- 2024-2025學年下學期高一生物人教版期末必刷常考題之基因指導蛋白質的合成
- 建筑施工特種作業-建筑架子工(普通腳手架)真題庫-3
- 散文構思小說題目及答案
- 10 3 二項分布 超幾何分布和正態分布-高考數學真題分類 十年高考
- 2023-2024學年四川省宜賓市高二下學期期末學業質量監測數學試題(解析版)
- 剖切面的種類與剖切方法
- 2023-2024學年湖北省咸寧市高二下學期期末考試數學試卷(解析版)
- 魚塘個人承包協議書范本
- GB/T 4706.8-2024家用和類似用途電器的安全第8部分:電熱毯、電熱墊、電熱衣及類似柔性發熱器具的特殊要求
- 正壓式空氣呼吸器使用培訓課件
- 08S305 小型潛水排污泵選用及安裝
- 初中自薦信范文
- 血培養采集課件
- 廣東省茂名市直屬學校2023-2024學年七年級下學期期末數學試題
- 小學語文部編版六年級下冊全冊閱讀知識點(分單元課時編排)
- JBT 2231.3-2011 往復活塞壓縮機零部件 第3部分:薄壁軸瓦
- 2024-2030年中國果醬行業市場規模調研及前景趨勢預測報告
- 2024中車大連機車車輛限公司招聘高校畢業生170人高頻考題難、易錯點模擬試題(共500題)附帶答案詳解
評論
0/150
提交評論