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

    中定義和使用牛

    發布時間: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文件已經做好了。

    合肥癲癇病醫院哪家治療最好
    海口包皮包莖
    小孩容易生病怎么辦
    猜你會喜歡的
    猜你會喜歡的
    主站蜘蛛池模板: 国产免费人成视频在线观看| fc2ppv在线观看| 97日日碰曰曰摸日日澡| **网站欧美大片在线观看| 高清永久免费观看| 翁止熄痒禁伦短文合集免费视频| 精品久久久BBBB人妻| 欧美成人精品福利在线视频| 日韩AV无码一区二区三区不卡 | 亚洲精品国产高清不卡在线| 国产精品亚洲精品日韩已满| 国产拍拍拍无码视频免费| 国产va免费精品高清在线| 亚洲视频日韩视频| 出包王女第四季op| 国产乱码一区二区三区爽爽爽| 国产不卡免费视频| 亚洲综合第一区| 久久精品国产亚洲精品| 一嫁三夫电影免费观看| 天堂俺去俺来也www久久婷婷| 视频二区三区国产情侣在线| 爱情岛永久地址www成人| 日韩亚洲欧美视频| 夜里18款禁用的视频软件| 国产女人乱人伦精品一区二区| 免费jizz在线播放视频高清版 | 免费在线成人网| 乱人伦人妻中文字幕在线入口| 一区二区三区欧美日韩| 国产自产视频在线观看香蕉| 精品一区二区三区免费毛片爱 | 激情内射日本一区二区三区| 日韩在线一区二区三区视频| 夜夜精品无码一区二区三区| 国产免费久久久久久无码| 亚洲欧美日韩在线不卡| 中国一级毛片免费看视频| 日本高清视频色wwwwww色| 男女猛烈无遮挡免费视频| 日本漫画免费大全飞翼全彩|