DLL 的编写与调用(入门)

一直调用别人写的动态库,也不知道到底是什么是动态主库,今天没事自己用VC6.0写个(纯粹练手,高手就不要看了),心得:Code wins arguments.代码胜于雄辩!---FaceBook
非常简单:一、新建动态库;二、调用自己写的动态库(两种方式);

一、vc6新建一个动态链接库工程(FirstDemo)
1、头文件(FD.h)
    /*声明接口函数*/
extern "C" _declspec(dllexport) int Sum(int a,int b);//加法
extern "C" _declspec(dllexport) int Max(int a,int b);//取最大值

2、Cpp文件(FD.cpp)


#include "FD.h"
/*实现接口函数*/
extern "C" _declspec(dllexport) int Sum(int a,int b){
return a+b;
}
extern "C" _declspec(dllexport) int Max(int a,int b){
if(a>b) return a;
else return b;
}

二、vc6新建一个测试生成的FirstDemo.dll 的Win32 Console Application工程(TestDll)
/*两种方式测试*/
1、头文件(YSDY.h)---隐式调用 测试
    /**
*隐式链接方式调用dll,首先将xxx.dll和 xxx.lib文件放到Debug 文件夹下。然后#pragma comment(lib,"./Debug/xxx.lib")
*此方式特点:在程序一开始执行的时候,就将dll文件全部加载到程序中,不会释放。所以......
*/
#pragma comment(lib, "./Debug/FirstDemo.lib")
int testYS();

2、Cpp文件(YSDY.cpp)---隐式调用 cpp
#include <windows.h>
#include <iostream.h>
/*隐式链接方式调用dll中方法,不要忘记声明dll中的函数*/
extern "C" _declspec(dllimport) int Sum(int a,int b);
int testYS(){
int c=Sum(4,8);//调用处。
cout<<c<<endl;
return 0;
}

3、头文件(XSDY.h)---显示调用 测试
int test();

4、Cpp文件(XSDY.cpp)---显示调用 cpp
#include <iostream.h>
#include <windows.h>

/**
*对dll中的函数进行显式调用
*推荐使用这种方式 调用dll
*/
int test(){
typedef int(*pSum)(int a,int b);//函数指针类型 pSum
pSum sum=NULL;
HINSTANCE hDLL=NULL;
hDLL=LoadLibrary("FirstDemo.dll");//加载动态库文件FirstDemo.dll ,得到动态库句柄
sum=(pSum)GetProcAddress(hDLL,"Sum"); //得到函数句柄(指针)
if(sum){
int A=sum(2,7);
cout<<A<<endl;

}
FreeLibrary(hDLL);//卸载FirstDemo.dll文件;
return 0;
}

5、入口main
#include <windows.h>
#include <iostream.h>
#include "XSDY.h"
#include "YSDY.h"

/**
*工程入口函数
*/
void main(void){
test();//dll中方法显示调用
testYS();//隐式链接
}



代码:在附件里有两个工程:第一个是dll工程,第二个是调用dll的测试工程。
太晚了,睡觉了。。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值