1.用VS2017編寫一個C++動態鏈接庫(DLL)給 易語言,C++,C#等第三方調用
2.開發環境VS2017
創建DLL
第一步:
首先我們VS界面左上角:文件(F)-》新建項目-》visual C++ -》windows 桌面 -》動態鏈接庫(DLL)
得到以下界面
第二步:
我們新建一個頭文件:<Dll1.h>
第三步:
新建一個Dll1.cpp文件
在新建Dll1.cpp文件裏面編寫代碼
1.需要用到頭文件<Dll1.h> <pch.h>和 <Windows.h>
// Dll1.cpp : 定義 DLL 應用程序的導出函數。
//
#include "Dll1.h"
#include "pch.h"
#include <Windows.h>
//兩數相加
int WINAPI add(int n1, int n2)
{
return n1 + n2;
}
第四步:
我們在 <Dll1.h> 頭文件裏:聲明函數
#pragma once
int WINAPI add(int n1, int n2);
第五步:
導出函數:有 3種 導出方法,頭文件和cpp都要改
1.第一種:在函數返回值類型前面加上 __declspec(dllexport)
__declspec(dllexport) int WINAPI add(int n1, int n2);
得到效果如圖:
由於C++支持函數重載,國人稱之爲 “名稱粉碎機制” 所以導出函數名會改變,第三方調用的時候需帶如圖名稱,顯然不是很適合咱
2.第二種:在函數返回值類型前面加上 extern “C” __declspec(dllexport) 指定該函數是個C語言的函數
extern "C" __declspec(dllexport) int WINAPI add(int n1, int n2);
得到效果如圖:
第三方調用的時候需帶如圖名稱了,顯然也不是很合適
3.第三種:新建 “Dll1.def” 文件實現函數導出
在 “Dll1.def ” 寫入代碼:
LIBRARY
EXPORTS
add
.def 文件中的第一條 LIBRARY 語句不是必須的,但LIBRARY 語句後面的 DLL 的名稱必須正確,即與生成的動態鏈接庫的名稱必須匹配。此語句將 .def 文件標識爲屬於 DLL。鏈接器將此名稱放到 DLL 的導入庫中。
EXPORTS語句列出名稱,可能的話還會列出 DLL 導出函數的序號值。通過在函數名的後面加上 @ 符和一個數字,給函數分配序號值。當指定序號值時,序號值的範圍必須是從 1 到 N,其中 N 是 DLL 導出函數的個數。
得到效果如圖:
生成解決方案
此時我們就可以第三方程序調用這個DLL了;
易語言調用例子:
1.將DLL放到運行目錄
.版本 2
.支持庫 spec
.程序集 窗口程序集_啓動窗口
.子程序 __啓動窗口_創建完畢
調試輸出 (“5+9的計算結果=”, add (5, 9))
.版本 2
.DLL命令 add, 整數型, "Dll1.dll", "add"
.參數 a, 整數型
.參數 b, 整數型