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

    中定義和使用牛

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

    合肥癲癇病醫院哪家治療最好
    海口包皮包莖
    小孩容易生病怎么辦
    猜你會喜歡的
    猜你會喜歡的
    主站蜘蛛池模板: 正能量网站不用下载免费观看视频软件| 国产亚洲高清不卡在线观看| 国产1区2区3区4区| 三级黄在线播放| 色妞视频资源在线观看| 婷婷开心深爱五月天播播| 亚洲欧美电影在线一区二区| 久久综合狠狠综合久久97色| 日本bbwbbwbbw| 免费国产剧情视频在线观看| 182tv午夜线路一线路二| 日本高清不卡在线| 免费成人在线观看| 高雅人妻被迫沦为玩物| 小小在线观看视频www软件| 亚洲日韩一页精品发布| 韩国r级春天在线无删减| 妞干网手机视频| 久久婷婷成人综合色| 真实调教奇优影院在线观看| 国产精品任我爽爆在线播放| 久久久久99精品成人片直播| 男人扒开女人下面狂躁动漫版| 国产私拍福利精品视频推出| 中文字幕亚洲激情| 欧美激情第1页| 国产三级在线免费| 国产又爽又粗又猛的视频| 性欧美videos高清喷水| 欧美国产中文字幕| 老师办公室被吃奶好爽在线观看 | 无码人妻丰满熟妇区五十路 | 欧美zooz人禽交免费观看| 国产大片黄在线观看| 一本久久伊人热热精品中文| 正在播放高级会所丰满女技师| 四虎www成人影院免费观看| 91在线精品中文字幕| 欧美aaaaaa级午夜福利视频| 啊灬啊灬啊灬快灬高潮少妇 | 最新精品亚洲成a人在线观看|