vs2017生成dll和添加版本信息以及調用

#生成dll

前提

  • vs2017

過程

  • 新建一個項目->windows桌面->windows桌面嚮導(網上很多文章都是從控制檯應用程序開始,之前的版本可以2017做了相應的更改)
    這裏寫圖片描述
    這裏寫圖片描述
  • 在工程中添加類 在.h中寫如下
#pragma once
#define MYLIBAPI  extern   "C"     __declspec( dllexport ) 
extern "C"  __declspec(dllexport) int panny(int i, int(*call_back)(int a, int b));
__declspec(dllexport) int sum(int a, int b);
  1. extern "C“以C的格式 導出,不加也是可以運行的,define只是一種編程風格

  2. 在對應的.cpp中實現 ,一般你寫在.h中的方法 會提示你在.cpp中實現確定一下就會生成對應的方法框架

  3. 這種方式生成的dll可能會造成函數名的更改,如果不怕麻煩可以查一下更改後的函數名然後使用對應的名子一樣可以。
    這裏寫圖片描述

  4. 還可以通過def文件來更改文件名和函數順序。切記一定要在鏈接器->輸入->模版定義文件中添加對應的文件
    這裏寫圖片描述

  5. 添加資源文件->添加對應的版本資源文件
    這裏寫圖片描述

調用

  1. 動態調用
int a = 5, b = 3;
	HINSTANCE hInst = LoadLibraryA("DllTest.dll");
	typedef int(*pFun)(int, int);//定義一個函數指針類型pAdd  
	pFun add = (pFun)GetProcAddress(hInst, "sum");
	cout << a << " + " << b << " = " << add(a, b) << endl;
	cin >> a;
    return 0;
  1. 靜態調用
  • 在鏈接器->常規->附加器目錄添加lib文件的文件夾
  • 在鏈接器->輸入->輸出文件添加對應的文件名
//extern int sum(int, int);                             //告訴編譯器,add函數是在該源文件外部定義的函數  
_declspec(dllimport) int sum(int, int);//告訴編譯器,sub函數是從動態庫導入的函數  
									   //這兩種方式都可以正常的調用,但是下面的相對來說加載的更快一些  
int main()
{
	int a = 5, b = 3;
	cout << a << " + " << b << " = " << sum(a, b) << endl;
	cin >> a;
	return 0;
}
發佈了80 篇原創文章 · 獲贊 13 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章