綜合實驗一 用所學的內容編寫一個動態(tài)鏈接庫的文件_第1頁
綜合實驗一 用所學的內容編寫一個動態(tài)鏈接庫的文件_第2頁
綜合實驗一 用所學的內容編寫一個動態(tài)鏈接庫的文件_第3頁
綜合實驗一 用所學的內容編寫一個動態(tài)鏈接庫的文件_第4頁
綜合實驗一 用所學的內容編寫一個動態(tài)鏈接庫的文件_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、綜合實驗一 用所學的內容編寫一個動態(tài)鏈接庫的文件1 實驗目的(1) (1)       了解和掌握類和指向函數(shù)的指針的使用。(2) (2)       了解和掌握宏的使用,(3) (3)       掌握動態(tài)鏈接庫文件創(chuàng)建的過程。2 實驗要求 熟練掌握動態(tài)鏈接庫文件的創(chuàng)建3 實驗步驟與內容1.啟動Visual C+6.0或者C+ Builder 5.0 .在WINDOWS98或WINDOWS 2000環(huán)境下,找到Vi

2、sual C+6.0或者C+ Builder 5.0圖標,雙擊之。為了不使Visual C+6.0或者C+ Builder 5.0的默認搜索路徑與WINDOWS其他軟件相沖突,清修改Visual C+6.0或者C+ Builder 5.0圖標的屬性。在屬性|程序|批處理一欄中填上你自己的批處理程序名。以便啟動時,首先運行你的批處理程序。然后在該批處理程序中,寫上path.路徑。2.設置用戶程序子目錄 設置用戶程序子目錄的目的是,將所有編程時產生的中間文件和最終執(zhí)行程序文件全部放在自己的目錄中,以便管理。 3.創(chuàng)建和輸入程序 Visual C+6.0啟動后,要先建立一個project工程文件。方

3、法為: ·選擇File|new 菜單項,將彈出New 對話框。 ·單擊Projects 選項卡 ·在Location中填用戶子目錄路徑 ·在Project name中填入工程名(如MyDll) ·在列表中選擇MFC AppWizard(dll),表示你編制的應用程序將生成動態(tài)鏈接庫文件(.dll) ·按照提示創(chuàng)建一個自己想要的工程 ² ²        定位到mydll.h文件處,添加動態(tài)鏈接庫的函數(shù)原型聲明,下面為mydll.h的內容: / 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 文件處,添加動態(tài)鏈接庫中的函數(shù)的實現(xiàn)部分,下面為mydll.cpp的內容: / 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的內容。 ; 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         編譯程序 思考問題² ²        程序中大小寫用錯了,結果會怎樣?² ²        如果返回類型void沒有,結果會怎樣,是否需要return語句?² ²    &#

19、160;   編譯中若有警告信息,影響程序運行嗎?² ²        如何編寫動態(tài)鏈接庫文件以及步驟?   綜合實驗二 動態(tài)鏈接庫文件的調用1 實驗目的(1) (1)       解和掌握類和指向函數(shù)的指針的使用。(2) (2)       了解和掌握宏的使用。(3) (3)     &

20、#160; 掌握如何顯示調用動態(tài)鏈接庫文件。(4) (4)       掌握如何隱示調用動態(tài)鏈接庫文件。(5) (5)       調用動態(tài)鏈接庫文件的步驟。2 實驗要求熟練掌握在自己的應用程序中調用動態(tài)連接庫文件的方法3 實驗步驟與內容1) 1)        啟動Visual C+6.0或者C+ Builder 5.0 .在WINDOWS98或WINDOWS 2000環(huán)境下,找到Visual C+6.0

21、或者C+ Builder 5.0圖標,雙擊之。為了不使Visual C+6.0或者C+ Builder 5.0的默認搜索路徑與WINDOWS其他軟件相沖突,清修改Visual C+6.0或者C+ Builder 5.0圖標的屬性。在屬性|程序|批處理一欄中填上你自己的批處理程序名。以便啟動時,首先運行你的批處理程序。然后在該批處理程序中,寫上path.路徑。2)設置用戶程序子目錄 設置用戶程序子目錄的目的是,將所有編程時產生的中間文件和最終執(zhí)行程序文件全部放在自己的目錄中,以便管理。 3)創(chuàng)建和輸入程序 Visual C+6.0啟動后,要先建立一個project工程文件。方法為: ·

22、選擇File|new 菜單項,將彈出New 對話框。 ·單擊Projects 選項卡 ·在Location中填用戶子目錄路徑 ·在Project name中填入工程名 ·在列表中選擇MFC AppWizard(exe),表示你編制的應用程序將生成可執(zhí)行文件(.exe) ·按照提示創(chuàng)建一個自己想要的工程 4)調用步驟² ²        隱示鏈接包含導出函數(shù)(或C+類)聲明的頭文件(.h)導入庫(.lib)文件實際的DLL(.dll)文件² 

23、78;        顯示鏈接 顯示鏈接時,使用DLL的可執(zhí)行程序在運行時通過函數(shù)調用來顯示加載或卸載 DLL,并通過函數(shù)指針來調用DLL的導出函數(shù),要顯示鏈接DLL,應用程序必須調用LoadLibrary來加載DLL,并獲取模塊句柄,調用GetProcAddress來獲取應用程序要調用的導出函數(shù)的指針,使用完DLL后,應調用FreeLibrary來卸載DLL. 5)主要程序代碼 (1)定位到TestDllView.h文件處,添加函數(shù)原型聲明,下面為TestDllView.h的內容: / 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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論