您的位置:首页 > 其它

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

2015-09-21 15:20 316 查看
创建动态连接库

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: