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