靜/動態鏈接庫使用總結

-----------------------編寫方法(visual studio爲例)
、靜態庫編寫
1.首先當然是開VS然後創建一個靜態庫工程啦
2.格式.一般有頭文件.h和原文件.cpp,當然你也可以寫一在一個cpp裏.
mydll.h------------------------
extends "C"
{
     int sum(int num1,int num2); 
     int mult(int num1,int num2);
}
mydll.cpp--------------------
#include "Mylib.h"
int sum(int num1,int num2)
{
 return num1+num2;
}
int mult(int num1,int num2)
{
 return num1*num2;
}
3.編譯得到lib,然後拿埋mydll.h就可以使用了
 
、動態庫編寫
1.首先創建一個動態工程.
2.格式.
mydll.h------------------------
#ifdef DLL_API
#else
#define DLL_API extern "C" _declspec(dllimport)
#endif
DLL_API int _stdcall add(int a,int b);
mydll.cpp--------------------
#define DLL_API extern "C" _declspec(dllexport)
#include "mydll.h"
#include <stdio.h>
int add(int a,int b)
{
 return a+b;
}
3.編譯的到lib,和dll,然後拿埋編寫的mydll.h就可以使用了.
 
個人想說的話:動態庫必須要用_declspec()字樣標識,但是靜態的就不用了.extends "c" 和_stdcall都是調用方式,
詳細看這裏
 
-----------------------使用方法
一、靜態庫包括.lib.h文件,在工程中使用靜態庫分爲3步:
1在工程中加入靜態庫,有兩種方法:
方法一:項目設置中引用.libproject-setting-link-object/library modules中添加.lib;(需要在tools/options設置正確的引用路徑)
方法二:在項目中直接加入libproject-add to project-files,選擇正確的.lib
方法三:   #pragma comment(lib, "##/##/mine.lib")
2在工程中包括.h文件;(可能需要在tools/options設置正確的引用路徑)
3在工程中使用靜態庫中的函數;
 
二、 動態鏈接庫一般包括.lib(導出函數).h.dll,使用動態庫有兩種情況:
1隱式鏈接,同使用靜態庫相似,分爲三步:引用.lib,包含頭文件,使用導出函數;
2動態加載,直接使用LoadLibrary() FreeLibrary( ) GetProcAddress() 加載所需的動態庫,然後指定所需的導出函數,效率最高!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章