您的位置: 旅游網 > 圖庫 >> 生活照

    中定義和使用牛

    發布時間:2021-10-28 05:25:26

    什么是DLL?

    DLL指的是動態鏈接庫(Dynamic Link Library),它是一個可以被多個應用程序(甚至是不同語言編寫的應用程序)同時調用的可執行二進制文件,是一個可共享的庫。DLL是建立在客戶/服務器通信的概念上,包含若干函數、類或資源的庫文件,函數和數據被存儲在一個DLL(服務器)上并由一個或多個客戶導出而使用,這些客戶可以是應用程序或者是其它的DLL。

    在下面我們將通過一個具體的例子來說明如何利用定義一個DLL文件,并且在的應用程序中調用,這個例子的主要功能是通過DLL獲取系統的機器名、操作系統類型和IP地址。

    在中定義DLL文件

    選擇菜單項,選擇文件-新建-項目,在彈出的新建項目的對話框中,選擇項目類型為Visual C++ 項目,類別為MFC的工程,在右邊的模板中,選擇MFC DLL模板,給項目取名為TestDLL,選擇好項目的位置,按確定健,進入應用程序設置。

    在應用程序設置中,我們可以看到,有三種DLL類型,它們依次對應著三類DLL。

    靜態DLL與共享DLL的區別是:前者使用的是MFC的靜態鏈接庫,生成的DLL文件長度大,一般不使用這種方式,后者使用MFC的動態鏈接庫,生成的DLL文件長度小;動態鏈接到MFC的共享DLL所有輸出的函數應該以如下語句開始(用于正確切換MFC模塊狀態): AFX_MANAGE_STATE(AfxGetStaticModuleState( )) 擴展DLL用來建立MFC的派生類,只被用MFC類庫所編寫的應用程序調用。常規DLL(包括靜態與動態)的一個特點是在源文件里有一個繼承CWinApp的類(從CWinApp派生,但沒有消息循環),被導出的函數是C++類或者C++成員函數,調用常規DLL的應用程序不必一定是MFC應用程序。擴展DLL和常規DLL不一樣,它沒有一個從CWinApp繼承而來的類的對象,編譯器默認了一個DLL入口函數DLLMain()作為對DLL的初始化。

    另外還可以添加兩個附加功能:自動化和windows套接字,如果選擇了這兩項,程序會做一些初始化,在這里我們就不做討論了。

    在這個例子里,我們選擇“使用共享的MFC DLL”。

    添加代碼:

    1、在工程中導入p和systeminfo.h文件,這兩個文件用來獲取本機的機器名,操作系統版本和本機IP列表,具體的定義,請參考源文件。

    在TestDLL.h頭文件中,引入systemInfo.h頭文件

    #include \"systemInfo.h\"

    添加變量:

    CSystemInfo m_SystemInfo;

    2、在CTestDLLApp類中添加三個函數用戶獲取信息:

    里皮迅速做出換人調整。正當恒大重新主宰了局勢 //機器名

    char* GetHostName(void);

    //系統類型

    char* GetSystemType(void);

    //IP地址

    void GetIPAddressList(char ** lpIPList,DWORD *lpNumber);  函數定義如下: //機器名

    char* CTestDLLApp::GetHostName(void)

    {

    char* lpsz = new char[1024];

    m_tHostName(lpsz);

    return lpsz;

    }

    //系統類型

    char* CTestDLLApp::GetSystemType(void)

    {

    char* lpsz = new char[1024];

    m_tlSystemType(lpsz);

    return lpsz;

    }

    //IP地址

    void CTestDLLApp::GetIPAddressList(char ** lpIPList,DWORD *lpNumber)

    {

    m_tIPAddressList(lpIPList,lpNumber);

    }  3、添加輸出函數:

    打開TestDLL工程中的“p”文件,在: // 唯一的一個 CTestDLLApp 對象

    CTestDLLApp theApp;

    的后面添加輸出的DLL函數,函數定義如下:

    /******************* 在這里添加輸出函數 ***************************/

    /********************************************

    函數名稱:GetHostName

    功能:獲取本機的機器名稱

    返回:strHostName-本機機器名稱

    *********************************************/

    extern \"C\" _declspec(dllexport) void GetHostName(LPTSTR strHostName )

    {

    //如果是傳遞字符串需要使用strcpy拷貝字符串的地址,而不能直接等于。

    strcpy(strHostName,tHostName());

    }

    /********************************************

    函數名稱:GetSystemType

    功能:獲取本機操作系統版本

    返回:strSystemType-本機操作系統版本

    *********************************************/

    extern \"C\" _declspec(dllexport) void GetSystemType(char * strSystemType)

    {

    strcpy(strSystemType,tSystemType());

    }

    /********************************************

    函數名稱:GetIPAddressList

    功能:獲取本機的IP地址

    返回:lpIPList-本機的IP地址數組,lpNumber IP地址個數

    *********************************************/

    extern \"C\" _declspec(dllexport) void GetIPAddressList(char ** lpIPList,DWORD *lpNumber)

    {

    tIPAddressList(lpIPList,lpNumber);

    }  最后編譯工程文件,生成l文件。

    至此,一個DLL文件已經做好了。

    合肥癲癇病醫院哪家治療最好
    海口包皮包莖
    小孩容易生病怎么辦
    猜你會喜歡的
    猜你會喜歡的
    主站蜘蛛池模板: 91av在线播放| 久久国产精品亚洲综合| 美女羞羞视频免费网站| 国产精品第六页| 七次郎在线视频观看精品| 最新中文字幕在线资源| 亚洲视频在线观看视频| 色综合天天综合网国产成人| 国产精品亚洲精品日韩已满| www.seyu.av| 日本三级黄视频| 亚洲人免费视频| Av鲁丝一区鲁丝二区鲁丝三区| 疯狂七十二小时打扑克| 国产免费一期二期三期四期| 5g996未满十八| 好大好湿好硬顶到了好爽视频 | 性欧美大战久久久久久久久| 久久精品国产久精国产| 欧美日韩国产亚洲人成| 免费又黄又爽又猛的毛片| 色综合色综合久久综合频道 | 国产亚洲精品精品国产亚洲综合| 2020天堂中文字幕一区在线观| 女人扒开双腿让男人捅| 久久99中文字幕| 日韩激情无码免费毛片| 亚洲国产精品成人综合色在线婷婷| 男人j进女人p里动态图| 囯产精品一品二区三区| 麻豆国产高清精品国在线| 国产精品免费精品自在线观看 | 欧美日韩在线播放| 免费a级毛片无码| 老司机久久影院| 国产成人99久久亚洲综合精品| 亚洲欧美国产一区二区三区| 色综合色综合久久综合频道| 国产成人精品AA毛片| 香蕉视频污在线观看| 国产麻豆精品精东影业av网站|