随笔-43  评论-2  文章-6  trackbacks-0
09DllDemo.h
1#ifdef MY09DLLDEMO_EXPORTS
2#define MY09DLLDEMO_API __declspec(dllexport)
3#else
4#define MY09DLLDEMO_API __declspec(dllimport)
5#endif
6
7//声明输出函数
8MY09DLLDEMO_API void MyMessageBox(LPCTSTR pszContent);

09DllDemo.cpp
 1#include "stdafx.h"
 2#include "09DllDemo.h"
 3
 4HMODULE g_hModule;
 5
 6BOOL 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//定义输出函数
24void 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
1EXPORTS
2    MyMessageBox


在09ImportDemo工程中,引用导出的函数:
09ImportDemo.cpp
 1#include "stdafx.h"
 2#include <Windows.h>
 3
 4//定义要引用函数的指针
 5typedef void (*pMyFun)(LPCSTR);
 6int 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}
posted on 2012-08-30 23:58 寻步 阅读(321) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理