初学VC,不得方法,每天误打误撞的学习一点,代码存在桌面怕是一旦删除了就遗忘了,还是记录下来为妙。 (诚心希望高手指教c与c++结合学习的方法!)
昨天看到了一篇文章,讲的是dll的简单创建与调用,自己实践了一下,可用。现叙述如下:
1)打开VC ,创建工程-Win32 Dynamic-Link Library
2)创建cpp文件
3)dll代码
extern "C" int _declspec(dllexport) add(int a,int b){
return a+b;
}
4)编译-链接
5)新建工程-Win32 Console-Application
6)新建cpp文件,代码如下:
#include <iostream.h>
#include <Windows.h>
void main(){
typedef int (*ADD)(int ,int);//函数指针类型
HINSTANCE Hint = ::LoadLibrary("c3.dll");//加载我们刚才生成的dll
ADD add=(ADD)GetProcAddress(Hint,"add") ; //取得dll导出的add方法
cout<<add(3,4)<<endl;
}
注释:若不加extern "c" 则用Depends查看dll时会发现外部函数混乱,为:?add@@YAHHH@Z ;若不加_declexp(dllexport) 则无法导出外部函数,导致调用失败。但这两句可以通过一个单独的*.def文件说明,这个文件放在dll工程的cpp所在目录即可,文件内容如下:
LIBRARY
EXPORTS
myadd=add @4 //将外部函数编号,作用是可按编号调用该函数。
7)重复5、6两步骤,文件代码如下:
#include <iostream.h>
#include <Windows.h>
void main(){
typedef int (*ADD)(int ,int);//函数指针类型
HINSTANCE Hint = ::LoadLibrary("aa.dll");//加载我们刚才生成的dll
ADD add = (ADD)GetProcAddress(Hint,MAKEINTRESOURCE(4));//取得dll导出的add方法
cout<<add(3,4)<<endl;
add=(ADD)GetProcAddress(Hint,"myadd");
cout<<add(3,4)<<endl;
}
这样就按两种方式调用了函数,并且得到了一致的结果。
好了,仅作为笔记,虽然这些在昨天还是陌生,但相信在未来的某天还是能用上的。
前辈们如果飘过,还是希望能够指点下学习C/C++的方法,感激!