版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、綜合實(shí)驗(yàn)一 用所學(xué)的內(nèi)容編寫(xiě)一個(gè)動(dòng)態(tài)鏈接庫(kù)的文件1 實(shí)驗(yàn)?zāi)康模?) (1) 了解和掌握類和指向函數(shù)的指針的使用。(2) (2) 了解和掌握宏的使用,(3) (3) 掌握動(dòng)態(tài)鏈接庫(kù)文件創(chuàng)建的過(guò)程。2 實(shí)驗(yàn)要求 熟練掌握動(dòng)態(tài)鏈接庫(kù)文件的創(chuàng)建3 實(shí)驗(yàn)步驟與內(nèi)容1.啟動(dòng)Visual C+6.0或者C+ Builder 5.0 .在WINDOWS98或WINDOWS 2000環(huán)境下,找到Vi
2、sual C+6.0或者C+ Builder 5.0圖標(biāo),雙擊之。為了不使Visual C+6.0或者C+ Builder 5.0的默認(rèn)搜索路徑與WINDOWS其他軟件相沖突,清修改Visual C+6.0或者C+ Builder 5.0圖標(biāo)的屬性。在屬性|程序|批處理一欄中填上你自己的批處理程序名。以便啟動(dòng)時(shí),首先運(yùn)行你的批處理程序。然后在該批處理程序中,寫(xiě)上path.路徑。2.設(shè)置用戶程序子目錄 設(shè)置用戶程序子目錄的目的是,將所有編程時(shí)產(chǎn)生的中間文件和最終執(zhí)行程序文件全部放在自己的目錄中,以便管理。 3.創(chuàng)建和輸入程序 Visual C+6.0啟動(dòng)后,要先建立一個(gè)project工程文件。方
3、法為: ·選擇File|new 菜單項(xiàng),將彈出New 對(duì)話框。 ·單擊Projects 選項(xiàng)卡 ·在Location中填用戶子目錄路徑 ·在Project name中填入工程名(如MyDll) ·在列表中選擇MFC AppWizard(dll),表示你編制的應(yīng)用程序?qū)⑸蓜?dòng)態(tài)鏈接庫(kù)文件(.dll) ·按照提示創(chuàng)建一個(gè)自己想要的工程 ² ² 定位到mydll.h文件處,添加動(dòng)態(tài)鏈接庫(kù)的函數(shù)原型聲明,下面為mydll.h的內(nèi)容: / M
4、yDll.h : main header file for the MYDLL DLL/ #if !defined(AFX_MYDLL_H_2D7DF429_D790_11D6_93F3_50784C6323E6_INCLUDED_)#define AFX_MYDLL_H_2D7DF429_D790_11D6_93F3_50784C6323E6_INCLUDED_ #if _MSC_VER > 1000#pragma once#endif / _MSC_VER > 1000 #ifndef _AFXWIN_H_#error include 's
5、tdafx.h' before including this file for PCH#endif #include "resource.h"/ main symbols / CMyDllApp/ See MyDll.cpp for the implementation of this class/int DrawTree(CPaintDC *dc,int xStart,int yStart,double length,double angle, int num);class CMyDllApp : public CWinApppublic:CM
6、yDllApp(); / Overrides/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CMyDllApp)public:virtual BOOL InitInstance();/AFX_VIRTUAL /AFX_MSG(CMyDllApp)/ NOTE - the ClassWizard will add and remove member functions here./ DO NOT EDIT what you see in these blocks of generated code
7、!/AFX_MSGDECLARE_MESSAGE_MAP(); / /AFX_INSERT_LOCATION/ Microsoft Visual C+ will insert additional declarations immediately before the previous line. #endif / !defined(AFX_MYDLL_H_2D7DF429_D790_11D6_93F3_50784C6323E6_INCLUDED_)² ²
8、60; 定位到mydll.cpp 文件處,添加動(dòng)態(tài)鏈接庫(kù)中的函數(shù)的實(shí)現(xiàn)部分,下面為mydll.cpp的內(nèi)容: / MyDll.cpp : Defines the initialization routines for the DLL./ #include "stdafx.h"#include "MyDll.h"#include <math.h> #ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif
9、60;/Note!/If this DLL is dynamically linked against the MFC/DLLs, any functions exported from this DLL which/call into MFC must have the AFX_MANAGE_STATE macro/added at the very beginning of the function./For example:/extern "C" BOOL PASCAL EXPORT ExportedFunction()/AFX_MANAGE_STATE(AfxGet
10、StaticModuleState();/ normal function body here/It is very important that this macro appear in each/function, prior to any calls into MFC. This means that/it must appear as the first statement within the /function, even before any object variable declarations/as their constructors may generate calls
11、 into the MFC/DLL./Please see MFC Technical Notes 33 and 58 for additional/details./ / CMyDllApp BEGIN_MESSAGE_MAP(CMyDllApp, CWinApp)/AFX_MSG_MAP(CMyDllApp)/ NOTE - the ClassWizard will add and remove mapping macros here./ DO NOT EDIT what you see in these blocks of generated code!/AFX_MS
12、G_MAPEND_MESSAGE_MAP() / CMyDllApp construction CMyDllApp:CMyDllApp()/ TODO: add construction code here,/ Place all significant initialization in InitInstance / The one and only CMyDllApp object CMyDllApp theApp;int DrawTree(CPaintDC *dc,int xStart,int yStart,double length,double
13、 angle, int num)int xEnd,yEnd;if (num=0) return 1;xEnd=xStart+(int)(length*cos(angle);yEnd=yStart+(int)(length*sin(angle);dc->MoveTo(xStart,yStart);dc->LineTo(xEnd,yEnd);DrawTree(dc,xEnd,yEnd,length*0.6,angle+0.624,num-1);DrawTree(dc,xEnd,yEnd,length*0.85,angle+0.08,num-1);DrawTree(dc,xEnd,yEn
14、d,length*0.65,angle-0.6,num-1);return 1; / CMyDllApp initialization BOOL CMyDllApp:InitInstance()if (!AfxSocketInit()AfxMessageBox(IDP_SOCKETS_INIT_FAILED);return FALSE; / Register all OLE server (factories) as running. This enables the/ OLE libraries to create objects from other appl
15、ications.COleObjectFactory:RegisterAll(); return TRUE; / Special entry points required for inproc servers STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)AFX_MANAGE_STATE(AfxGetStaticModuleState();return AfxDllGetClassObject(rclsid, riid, ppv); STDAPI DllCanUnl
16、oadNow(void)AFX_MANAGE_STATE(AfxGetStaticModuleState();return AfxDllCanUnloadNow(); / by exporting DllRegisterServer, you can use regsvr.exeSTDAPI DllRegisterServer(void)AFX_MANAGE_STATE(AfxGetStaticModuleState();COleObjectFactory:UpdateRegistryAll();return S_OK; ² ² &
17、#160; 在mydll.def中引出DrawTree函數(shù),下面為mydll.def的內(nèi)容。 ; MyDll.def : Declares the module parameters for the DLL. LIBRARY "MyDll"DESCRIPTION 'MyDll Windows Dynamic Link Library' EXPORTS ; Explicit exports can go hereDrawTreeDllCanUnloadNow PRIVATEDllGetClas
18、sObject PRIVATEDllRegisterServer PRIVATEl l 編譯程序 思考問(wèn)題² ² 程序中大小寫(xiě)用錯(cuò)了,結(jié)果會(huì)怎樣?² ² 如果返回類型void沒(méi)有,結(jié)果會(huì)怎樣,是否需要return語(yǔ)句?² ²
19、160; 編譯中若有警告信息,影響程序運(yùn)行嗎?² ² 如何編寫(xiě)動(dòng)態(tài)鏈接庫(kù)文件以及步驟? 綜合實(shí)驗(yàn)二 動(dòng)態(tài)鏈接庫(kù)文件的調(diào)用1 實(shí)驗(yàn)?zāi)康模?) (1) 解和掌握類和指向函數(shù)的指針的使用。(2) (2) 了解和掌握宏的使用。(3) (3) &
20、#160; 掌握如何顯示調(diào)用動(dòng)態(tài)鏈接庫(kù)文件。(4) (4) 掌握如何隱示調(diào)用動(dòng)態(tài)鏈接庫(kù)文件。(5) (5) 調(diào)用動(dòng)態(tài)鏈接庫(kù)文件的步驟。2 實(shí)驗(yàn)要求熟練掌握在自己的應(yīng)用程序中調(diào)用動(dòng)態(tài)連接庫(kù)文件的方法3 實(shí)驗(yàn)步驟與內(nèi)容1) 1) 啟動(dòng)Visual C+6.0或者C+ Builder 5.0 .在WINDOWS98或WINDOWS 2000環(huán)境下,找到Visual C+6.0
21、或者C+ Builder 5.0圖標(biāo),雙擊之。為了不使Visual C+6.0或者C+ Builder 5.0的默認(rèn)搜索路徑與WINDOWS其他軟件相沖突,清修改Visual C+6.0或者C+ Builder 5.0圖標(biāo)的屬性。在屬性|程序|批處理一欄中填上你自己的批處理程序名。以便啟動(dòng)時(shí),首先運(yùn)行你的批處理程序。然后在該批處理程序中,寫(xiě)上path.路徑。2)設(shè)置用戶程序子目錄 設(shè)置用戶程序子目錄的目的是,將所有編程時(shí)產(chǎn)生的中間文件和最終執(zhí)行程序文件全部放在自己的目錄中,以便管理。 3)創(chuàng)建和輸入程序 Visual C+6.0啟動(dòng)后,要先建立一個(gè)project工程文件。方法為: ·
22、選擇File|new 菜單項(xiàng),將彈出New 對(duì)話框。 ·單擊Projects 選項(xiàng)卡 ·在Location中填用戶子目錄路徑 ·在Project name中填入工程名 ·在列表中選擇MFC AppWizard(exe),表示你編制的應(yīng)用程序?qū)⑸煽蓤?zhí)行文件(.exe) ·按照提示創(chuàng)建一個(gè)自己想要的工程 4)調(diào)用步驟² ² 隱示鏈接包含導(dǎo)出函數(shù)(或C+類)聲明的頭文件(.h)導(dǎo)入庫(kù)(.lib)文件實(shí)際的DLL(.dll)文件²
23、78; 顯示鏈接 顯示鏈接時(shí),使用DLL的可執(zhí)行程序在運(yùn)行時(shí)通過(guò)函數(shù)調(diào)用來(lái)顯示加載或卸載 DLL,并通過(guò)函數(shù)指針來(lái)調(diào)用DLL的導(dǎo)出函數(shù),要顯示鏈接DLL,應(yīng)用程序必須調(diào)用LoadLibrary來(lái)加載DLL,并獲取模塊句柄,調(diào)用GetProcAddress來(lái)獲取應(yīng)用程序要調(diào)用的導(dǎo)出函數(shù)的指針,使用完DLL后,應(yīng)調(diào)用FreeLibrary來(lái)卸載DLL. 5)主要程序代碼 (1)定位到TestDllView.h文件處,添加函數(shù)原型聲明,下面為T(mén)estDllView.h的內(nèi)容: / TestDllView.h : in
24、terface of the CTestDllView class/ #if !defined(AFX_TESTDLLVIEW_H_CFCBD8ED_D7AF_11D6_93F3_50784C6323E6_INCLUDED_)#define AFX_TESTDLLVIEW_H_CFCBD8ED_D7AF_11D6_93F3_50784C6323E6_INCLUDED_ #if _MSC_VER > 1000#pragma once#endif / _MSC_VER > 1000 class CTestDllView : public CVi
25、ewprotected: / create from serialization onlyCTestDllView();DECLARE_DYNCREATE(CTestDllView) / Attributespublic:CTestDllDoc* GetDocument(); / Operationspublic: / Overrides/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CTestDllView)public:virtual void OnDraw(CDC* pDC); /
26、 overridden to draw this viewvirtual BOOL PreCreateWindow(CREATESTRUCT& cs);protected:virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);/AFX_VIRTUAL / Implementationpublic:virtu
27、al CTestDllView();#ifdef _DEBUGvirtual void AssertValid() const;virtual void Dump(CDumpContext& dc) const;#endif protected: / Generated message map functionsprotected:/AFX_MSG(CTestDllView)afx_msg void OnPaint();/AFX_MSGDECLARE_MESSAGE_MAP(); #ifndef _DEBUG / debug version in TestDllView.cppinline CTestDllDoc* CTestDllView:GetDocument() return (CTestDllDoc*)m_pDocument; #endif / /AFX_INSERT_LOCATION/ Microsoft Visual C+ will insert additional declarations immediately before the previous line. #endif / !defined(AFX_TESTDLLVIEW_H_CFCBD8ED_D7AF_11D6_93F
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年茶葉收購(gòu)與倉(cāng)儲(chǔ)管理合同2篇
- 水電安裝工程2025年度合同書(shū)協(xié)議2篇
- 二零二五版快遞物流服務(wù)質(zhì)量監(jiān)控與評(píng)估協(xié)議合同2篇
- 二零二五年電子供應(yīng)鏈采購(gòu)合同3篇
- 二零二五年度校園巴士運(yùn)營(yíng)管理合同范本3篇
- 二零二五年高端餐飲會(huì)所租賃承包合同范本3篇
- 2025年危險(xiǎn)品運(yùn)輸及應(yīng)急處理合同3篇
- 二零二五版物流倉(cāng)儲(chǔ)與新能源利用合同3篇
- 小學(xué)教師事業(yè)單位聘用合同(2篇)
- 二零二五年度綠色交通PPP特許經(jīng)營(yíng)權(quán)轉(zhuǎn)讓合同3篇
- 2024年云南省中考數(shù)學(xué)試題含答案解析
- 《火災(zāi)調(diào)查 第2版》 課件全套 劉玲 第1-12章 緒論、詢問(wèn) -火災(zāi)物證鑒定
- 汽車修理廠管理方案
- 借用他人名義買車協(xié)議完整版
- (正式版)JBT 5300-2024 工業(yè)用閥門(mén)材料 選用指南
- 校園超市經(jīng)營(yíng)投標(biāo)方案(技術(shù)方案)
- 基于Web服務(wù)的辦公系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)的開(kāi)題報(bào)告
- 國(guó)企工程類工作總結(jié)
- 電腦教室設(shè)計(jì)方案
- 計(jì)算機(jī)江蘇對(duì)口單招文化綜合理論試卷
- 高速公路環(huán)保水保方案
評(píng)論
0/150
提交評(píng)論