动态链接库的创建以及两种调用方式

创建动态连接库
vs2010创建项目 控制台项目 选择动态链接库
项目属性-配置属性-常规: 配置类型  动态库dll
            MFC的使用 在共享Dll中使用MFC

项目属性- C/C++代码生成-运行库:  多线程调试 DLL/(MDd)

创建函数的头文件:testdll.h
int add(int a,int b);
创建函数的定义文件testdll.cpp
#include "stdafx.h"
#include "testdll.h"

int add(int a,int b)
{
    return a+b;
}

创建一个def文件
Library 我的工程名字 (Dll1)
EXPORTS
;函数名称 函数的标识
add @1

选择生成,在debug目录下生成 dll1.lib 和dll1.dll

创建新项目调用动态链接库
第一种方式调用:

将函数头文件testdll.h dll1.lib dll1.dll三个文件拷贝到新创建的工程项目中
将头文件testdll.h 添加进新项目中


#include "stdafx.h"
#include "testdll.h"
#include "iostream"
using namespace std;
#pragma comment(lib,"dll1.lib")
int _tmain(int argc, _TCHAR* argv[])
{
    cout<<add(1,2);
    getchar();
    return 0;

在项目中引入相应头文件 配置lib文件 #pragram comment(lib,"") 将这些文件放在工程目录下即可


第二种方式调用:
#include "stdafx.h"
//#include "testdll.h"
#include "iostream"
using namespace std;
typedef int(*lpFunA)(int, int); //宏定义函数指针类型,这里假设你的FuncA是一个int型的函数,且带两个int型的参数,你可以假设为是一个求和的Add函数。
//#pragma comment(lib,"dll1.lib")
int _tmain(int argc, _TCHAR* argv[])
{
    //cout<<add(1,2);
    //getchar();
    
    
    HINSTANCE hDll;//定义个DLL句柄
    lpFunA addFun;//自定义函数的指针
    hDll=LoadLibrary("dll1.dll");//动态加载dll,这里假设你的dll放在你要调用它的工程的debug下
    if(hDll!=NULL)
    {
        addFun=(lpFunA)GetProcAddress(hDll,"add");//获得FunA的地址
        if(addFun !=NULL)
        {
            //这里正常使用addFun,跟普通函数一样
            cout<<addFun(1,2);
        }
        getchar();
        FreeLibrary(hDll);//用完之后要释放句柄
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值