虽然windows下的动态链接库有不止一种调用方式,但是既然叫做动态链接库,还是毕竟喜欢随用随调。
dll的生成:
1 VS下创建项目 Win32控制台应用程序
2 添加对应的.h .cpp文件
3 .cpp里包含头文件,.h文件里的函数声明前面加上 extern "C" __declspec(dllexport)
extern "C" __declspec(dllexport) double Add(double a, double b);
像写正常的c函数一样,区别就是这是生成.dll动态库文件,就像linux里生成.so一样
gcc -shared PrintS.o -olibPrintS.so
4 调用dll内的函数
把.dll文件拷贝到.exe所在目录,如下调用就好了
#include <Windows.h>
#include <iostream>
using namespace std;
typedef double(*func)(double a, double b);
void main(){
//动态加载dll
HMODULE hModule = LoadLibrary(L"createDll.dll");
if(!hModule){
cout << "error" << endl;
}
func Add1 = (func)GetProcAddress(hModule,"Add");
func Subtract = (func)(GetProcAddress(hModule,"Subtract"));
func Multiply = func(GetProcAddress(hModule,"Multiply"));
func Divide = func(GetProcAddress(hModule,"Divide"));
if(Add1){
cout << "Add(2,3) = " << Add1(2,3) << endl;
cout << "Sub(2,3) = " << Subtract(2,3) << endl;
cout << "Mul(2,3) = " << Multiply(2,3) << endl;
cout << "Div(2,3) = " << Divide(2,3) << endl;
}else{
cout << "not found dll function" << endl;
FreeLibrary(hModule);
return;
}
FreeLibrary(hModule);
system("pause");
}
详情看 https://blog.youkuaiyun.com/sinat_27382047/article/details/83246449