随手记就是防止以后遗忘而临时写的杂谈,内容不保证正确。
*********************************************刚无意间又发现一篇更好地博文:它的特点在于让我知道调用DLL中的数据成员变量。
http://blog.youkuaiyun.com/panyanyany/article/details/8065823
1、利用CString.Format整形转换成字符串.
http://jingyan.baidu.com/article/0aa2237594fb9b88cc0d641d.html
2、C++/MFC的DLL调用(环境:VC++6.0)
新建一个DLL生成工程(WIN32的或者MFC的),
新建两个文件:dllDemo.h, dllDemo.cpp
在头文件”dllDemo.h”中声明接口函数:
extern "C" _declspec(dllimport) int Sum(int a,int b);(dllimport 为输出DLL);
然后在“dllDemo.cpp”文件中实现接口函数:
#include"dllDemo.h"
extern"C" _declspec(dllexport)
int Sum(int a, int b)
{
return a+b;
}
执行后,在Debug目录下会声称.dll和.lib两个文件。
然后新建一个工程用于实现DLL调用(可以是WIN32应用台程序也可以是MFC .exe工程)
***********************************2.1 静态DLL调用:在程序执行之前将DLL中的内容全部加载进来,随后直接调用。
1、把上面DLL工程生成的.dll和.lib文件拷贝到你刚刚新建的工程目录的下的debug目录下,
2、 然后进入(工程)project-》(设置)settings中的link(连接)下,找到“对象/库模块一栏”在里面
写“C:\Users\Administrator\Desktop\mydll\Debug\mydll.lib ”(根据自己lib文件所在位置输入地址);
3、在你的调用工程中的头文件中输入调用声明:
extern "C" _declspec(dllimport) int Sum(int a,int b);//*******************这里要把export改成import ,dll输出改成dll调进嘛。
如果是MFC调用中工程,可以把调用声明语句放在stdafx.h中
4、 这样就可以直接调用DLL中的函数。
************************************2.2 动态DLL调用:需要调用DLL的某些函数,就仅仅加载并调用它。
1、只需要把.dll文件拷贝进新建用于调用dll的工程的debug目录下,(无需lib)。属性设置到此为止。
2、书写函数指针,LoadLibrary,GetProcAddress
3、可以直接调用dll中的函数。
4、 FreeLibrary(hDLL)
*************************动态和静态的区别
1、调用简便性:
动态就是需要用某个函数的时候就调用它,但每次调用都要写一遍LoadLibrary,GetProcAddress等语句,如果DLL里有很多函数,表示吃不
消。
静态调用就是暴力了点,不管你需不需要这些函数,我统统给你加载进来,虽然有点浪费资源,但这样调用的时候可以不需要使
用LoadLibrary,GetProcAddress语句就可以直接调用了。调用函数多的时候,就用这个吧。
2、调用实现的步骤差异:
2.1生成DLL文件的过程都是一样的。首先开创一个DLL工程。
然后先在头文件中声明一下:
extern"C" _declspec(dllexport)int Sum(int a, int b)
再然后在实现文件中实现它:
extern"C" _declspec(dllexport)
int Sum(int a, int b)
{return a+b;}
2.2步骤差异:
2.2.1 动态调用只需将dll文件拷贝到调用工程中的debug目录下,然后使用LoadLibrary,GetProcAddress,调用函数,FreeLibrary语句
就okay了。
而静态弟调用需要同时将dll和lib文件都拷贝到debug目录中。
还需要在工程->设置->连接->对象/库模板中输入.lib所在的地址,
不止这样,还要在头文件中预先声明:extern"C"_declspec(dllimport)int Sum(int a,int b);然后就可以直接调用了。
http://www.cnblogs.com/beer/archive/2010/08/19/1803560.html
(我是按照上面这个链接做的,感觉比第二个链接简单易懂好上手,不过还是跟它里面有的介绍有出入)
http://blog.youkuaiyun.com/suxinpingtao51/article/details/8910015
(感觉个人的实现过程跟链接中的内容不太一样,只要实现出来了就行)。