虽然在DLL中定义指向主程序的函数指针,看似程序逻辑有些混乱,但工程实际应用中有时却得这么干,因此简单总结一下,函数指针在开发中的应用。
第一步: 创建一般的动态库工程Win32s1
第二步: 在动态库.h文件中,自定义函数指针类型,声明导出函数
注:导出函数应用到外部主程序的相关计算与结果
typedef float (*outFun)(int, int, int); //函数指针类型
// typedef + 类型标识 + (指针变量名称) + (参数列表)
SBUI_API void getProfit(outFun fun); //声明导出函数
注:导出函数的返回类型与函数指针应用无关
第三步: 在动态库的.cpp文件中,实现一个由外部函数执行 + 动态库函数执行的一个动作
void getProfit(outFun fun)
{
int nGrossIncome = 90000; //总收入
int nLabourCosts = 1000; //人工成本
int nMaterialCosts = 2000; //材料成本
double nNetProfit = fun(
nGrossIncome,
nLabourCosts,
nMaterialCosts)/*求得税前利润*/
* (1 - 0.18);
char chNetProfit[512] = "/0";
sprintf(chNetProfit, "当期纯利润为 %f", nNetProfit); // #include <stdio.h>
MessageBox(NULL, chNetProfit, "收益计算", MB_OK|MB_ICONINFORMATION);
}
第四步: 在主程序中实现成本计算函数 setProfit,并调用DLL函数
float setProfit(int _nGrossIncome, int _nLabourCosts, int _nMaterialCosts)
{
int nSellingCosts = 5000;
return float(_nGrossIncome - nSellingCosts - _nLabourCosts - _nMaterialCosts);
}
#include "dll1.h"
#pragma comment(lib,"Win32s1.lib")
void CTestDlg::OnButton1()
{
getProfit(setProfit);
}