C++(VS2012)DLL动态库的生成和调用

DLL动态链接库的生成:

首先打开VS2012,新建——项目——Win32控制台应用程序(项目名称:ConsoleApplication1)——空项目

新建一个源文件source.cpp

先用控制台exe配置类型自己定义函数,并通过主函数调试

然后可以通过项目——属性——配置属性——常规——项目默认值——配置类型下

选择动态库(.dll)选项

然后点击Build,会在工程的Debug目录下生成一个DLL文件(ConsoleApplication1.dll)

extern "C" _declspec(dllexport) void myFun();

#include "iostream"
using namespace std;
void myFun()
{
    cout<<"Hello world"<<endl;
}
int main()
{
    myFun();
    return 0;
}

VS2012 DLL动态链接库的调用

首先建立一个win32控制台的空项目,自己建立一个源文件source.cpp

添加头文件include<windows.h>

定义一个函数指针类型 typedef void (*DLLFUN)();(注意返回值类型,参数顺序类型都要一样)

然后通过HINSTANCE hdll;创建一个实例句柄

hdll = LoadLibrary("xxxx.dll");    //加载动态库

这里字符串类型是LPSTR,当是unicode字符集的时候会不行,因此要在工程--属性--常规---默认字符集:把“unicode”改成支持多字符扩展即可

然后定义一个函数地址变量 DLLFun myFun1;

myFun1 = (DllFun)GetProcAddress(hdll,"myFun");获取动态库里面的myFun函数的入口地址

然后myFun1();调用即可

最后释放内存

FreeLiabrary(hdll);

#include"iostream"
#include "windows.h"
#include "time.h"
using namespace std;

typedef void (*DllFun)();
int main()
{

    HINSTANCE hdll;
    hdll = LoadLibrary("E:\\C++DLL_LIB\\ConsoleApplication1\\Debug\\ConsoleApplication1.dll");
    if(hdll == NULL)
    {
        FreeLibrary(hdll);
        cout<<"Dll loaded is fail..."<<endl;
        getchar();
        return -1;
    }
    DllFun myFun1;
    myFun1 = (DllFun)GetProcAddress(hdll,"myFun");
    if(myFun1 == NULL)
    {
        FreeLibrary(hdll);
        cout<<"DLLaddress loaded is fail..."<<endl;
        getchar();
        return -1;
    }
    myFun1();
    FreeLibrary(hdll);
    return 0;
}

 

posted @ 2015-12-19 23:25  一样菜  阅读(14495)  评论(0编辑  收藏  举报