【VC++】動態調用鏈接庫

#include "stdafx.h"
#include <windows.h>
#include <windowsx.h>
#include "resource.h"
#include "MainDlg.h"
typedef int(_cdecl* FunctionAdd)(int,int);
/*
Template designed by RuPeng.com. Please visit http://www.rupeng.com for more information
如鵬網(http://www.rupeng.com)大學生計算機學習社區,提供大量免費視頻學習教程,提供個性化一對一學習指導
*/
BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
        HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
        HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
        HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
    }
    return FALSE;
}
BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
    return TRUE;
}
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
    switch(id)
    {
        case IDC_OK:
        {
        HMODULE hModule;
        FunctionAdd add;
        hModule = LoadLibrary("Newdll.dll");
        //調試時hModule爲0x10000000
        //LoadLibrary返回的就是dll的句柄
        //參數可以是相對路徑,也可以是絕對路徑
        if(NULL==hModule )
            {
            MessageBox(hwnd,TEXT("加載dll失敗"),TEXT("錯誤"),MB_OK);
          
            }
            add =(FunctionAdd)GetProcAddress(hModule,"add");
            if(NULL==add)
            {
            MessageBox(hwnd,TEXT("加載dll失敗"),TEXT("錯誤"),MB_OK);
          
            }
            int r=add(1,1);
            TCHAR msg[256];
            wsprintf(msg,"1+1=%i",r);
            MessageBox(hwnd,msg,TEXT("錯誤"),MB_OK);
            FreeLibrary(hModule);
                      
          
        }
        break;
        default:
        break;
    }
}
void Main_OnClose(HWND hwnd)
{
    EndDialog(hwnd, 0);
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章