1.用C的编程方式生成.dll文件
1-1:MyDLL.h
#pragma once
#include <iostream>
#define DLL_EXPORT
#if defined DLL_EXPORT
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif
extern "C" DLL_API double Add(double a, double b);
extern "C" DLL_API double Subtract(double a, double b);
extern "C" DLL_API double Multiply(double a, double b);
extern "C" DLL_API double Divide(double a, double b);
1-2:MyDLL.cpp
#include "MyDLL.h"
double Add(double a, double b)
{
return a + b;
}
double Subtract(double a, double b)
{
return a - b;
}
double Multiply(double a, double b)
{
return a * b;
}
double Divide(double a, double b)
{
if (b == 0)
{
printf("b cannot be zero!");
}
return a / b;
}
2.测试生成的dll文件(动态调用和静态调用)
2-1:动态调用(此中调用方式只需把.dll文件拷贝到工程目录即可)
#include "stdio.h"
#include <stdlib.h>
#include "windows.h"
#include <iostream>
using namespace std;
int main(int argc, char * argv[])
{
typedef double(*FunctionAdd)(double,double); //函数指针
FunctionAdd pAdd = NULL;
HINSTANCE hDll = LoadLibraryA("MyDLL.dll"); ;
if(NULL != hDll)
{
pAdd =(FunctionAdd)GetProcAddress(hDll, "Add");
if(pAdd != 0)
{
cout<<"Add(10.0,6.0) = "<<pAdd(10.0,6.0)<<endl;
system("pause");
}
}
FreeLibrary(hDll);
return 0;
}
2-2:静态调用(此中方式需要把.dll文件、.lib文件、.h文件全部拷贝到工程目录文件夹下)
#include "MyDLL.h"
#pragma comment (lib,"MyDLL.lib")
int main(int argc, char * argv[])
{
double ret = Add(10.0,6.0);
printf("%lf\n",ret);
system("pause");
return 0;
}