Dll文件的编写和引用

Dll文件的编写和引用
09DllDemo.h
1 #ifdef MY09DLLDEMO_EXPORTS
2 #define  MY09DLLDEMO_API __declspec(dllexport)
3 #else
4 #define  MY09DLLDEMO_API __declspec(dllimport)
5 #endif
6
7 // 声明输出函数
8 MY09DLLDEMO_API  void  MyMessageBox(LPCTSTR pszContent);

09DllDemo.cpp
 1 #include  " stdafx.h "
 2 #include  " 09DllDemo.h "
 3
 4 HMODULE g_hModule;
 5
 6 BOOL APIENTRY DllMain( HANDLE hModule, 
 7                        DWORD  ul_reason_for_call, 
 8                        LPVOID lpReserved
 9                      )
10 {
11    switch (ul_reason_for_call)
12    {
13        case DLL_PROCESS_ATTACH:
14            g_hModule = (HMODULE)hModule;
15            break;
16        case DLL_THREAD_ATTACH:
17        case DLL_THREAD_DETACH:
18        case DLL_PROCESS_DETACH:
19            break;
20    }

21    return TRUE;
22}

23 // 定义输出函数
24 void  MyMessageBox(LPCTSTR pszContent)
25 {
26    char path[MAX_PATH];
27    GetModuleFileName(g_hModule,path,MAX_PATH);
28    MessageBoxA(NULL,pszContent,path,MB_OK);
29}

09DllDemo.def
1 EXPORTS
2     MyMessageBox


在09ImportDemo工程中,引用导出的函数:
09ImportDemo.cpp
 1 #include  " stdafx.h "
 2 #include  < Windows.h >
 3
 4 // 定义要引用函数的指针
 5 typedef  void  ( * pMyFun)(LPCSTR);
 6 int  main()
 7 {
 8    //加载目标Dll
 9    HMODULE hModule = LoadLibrary("09DllDemo.dll");
10    //得到目标函数的地址
11    pMyFun p = (pMyFun)GetProcAddress(hModule,"MyMessageBox");
12    if (p)
13    {
14        //引用函数
15        p("Hello World!");
16    }

17    FreeLibrary(hModule);
18    return 0;
19}

你可能感兴趣的:(Dll文件的编写和引用)