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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM