1 首先建立Dll
dll有三种 分别如下:
1 Non-MFC DLL:指的是不用MFC的类库结构,直接用C语言写的DLL,其输出的函数一
般用的是标准C接口,并能被非MFC或MFC编写的应用程序所调用。
2 Regular DLL:和下述的Extension Dlls一样,是用MFC类库编写的。明显的特点是
在源文件里有一个继承CWinApp的类。其又可细分成静态连接到MFC和动态连接到MFC上
的,但静态连接到MFC的动态连接库只被VC的专业般和企业版所支持。
3 Extension DLL:用来实现从MFC所继承下来的类的重新利用,也就是说,用这种类
型的动态连接库,可以用来输出一个从MFC所继承下来的类。Extension DLL使用MFC的
动态连接版本所创建的,并且它只被用MFC类库所编写的应用程序所调用。
因为有MFC提供支持,所以编写第二程和第三程的Dll更简便,可把Dll当成是一个应用程序来使用,以下两种均以提供了CWinApp的继承类。
(1)俗称的共享数据段即可以用类定义public的变量,MFC真的是很方便,但是对于入口处理还不知道如何,这可要研究下MFC源码才能知道,我也是菜鸟,知道的请纠正下,呵。
(2)输出函数 一般定义为类的protected 在输出函数前加上extern "C" _declspec(dllexport) 即代表输出函数
很简单吧,就是这么简单。自己做做吧!!
(3)这Dll重要就是在于输出接口吧,有输出了,可到下一步调用了,我说说C++调用Dll的方法吧,可能还有其它,但我只会这一种。 以下假如是做好了一个叫Easy.dll的文件。
[1]先用到HINSTANCE ht=LoadLibrary("Easy.dll") //Easy.dll是在当前文件夹下 就是把Dll加载进来
[2]接着就是找到该模块的模块句柄 HMODULE hm=GetModuleHandle(_T("MyRegularDll"));
[3]用GetProcAddress(hm,"输出函数名")来获得函数地址 这函数就是返回指向模块的函数指针,要怎么用呢,当然要知道接口了,就是说这个函数是怎么定义的比如Easy.dll里有个这样的输出函数定义:
extern "C" _declspec(dllexport) void startHook(); 那么就要跟着这接口定义一个这样的函数指针,定义如下:
typedef void (WINAPI * 函数指针名)() 其实就是和函数定义一样,只是函数名用(WINAPI * 函数指针)代替了
[4]全定义好了,下面就可以用了。 如:
typedef void (WINAPI * STARTHOOK)();
STARTHOOK startH=GetProcAddress(hm,"startHook");
startH(); //这就是调用函数 很简单吧。。 不会看不懂吧!!