在我的C++ DLL项目中,当我在Debug配置中构建项目时,它可以完美运行。
使用.def文件导出功能:
LIBRARY "calc"
EXPORTS
findMaxFreqEXL = findMaxFreq
findMinSpeedEXL = calcMinSpeed
findMaxSpeedEXL = calcMaxSpeed
createProfileEXL = createProfile
arrayTestEXL = arrayTest
setLimitsEXL = setLimits
这些功能在我的项目中都定义为:
double _stdcall findMaxFreq(double &dCutLength, double &dCutTime, double &dSealTime, double &dCutSpeed, double &dDoughHeight, double* limitArray)
{
Calc *calcObj = new Calc();
calcObj->setLimits((int)limitArray[0], (int)limitArray[1], (int)limitArray[2], (int)limitArray[3], limitArray[4], limitArray[5], (int)limitArray[6], (int)limitArray[7], (int)limitArray[8], (int)limitArray[9], (int)limitArray[10]);
double maxFreq = calcObj->calcMaxFreq((float) dCutLength, (float) dCutTime, (float) dSealTime, (float) dCutSpeed, (float) dDoughHeight);
//delete calcObj;
return maxFreq;
}
其余的功能等等。
生成的DLL文件的大小为192 kb,根据dumpbin的介绍,这些是导出的函数:
Dump of file C:\Redacted\Debug\calcDLL.dll
File Type: DLL
Section contains the following exports for calc.dll
00000000 characteristics
57B17EE6 time date stamp Mon Aug 15 10:35:50 2016
0.00 version
1 ordinal base
6 number of functions
6 number of names
ordinal hint RVA name
1 0 00013339 arrayTestEXL = @ILT+820(?arrayTest@@YGHPAN@Z)
2 1 00013460 createProfileEXL = @ILT+1115(?createProfile@@YGHAAN00000PAN11@Z)
3 2 000138E8 findMaxFreqEXL = @ILT+2275(?findMaxFreq@@YGNAAN0000PAN@Z)
4 3 00013744 findMaxSpeedEXL = @ILT+1855(?calcMaxSpeed@@YGNAAN00@Z)
5 4 00013500 findMinSpeedEXL = @ILT+1275(?calcMinSpeed@@YGNAAN00@Z)
6 5 000134F6 setLimitsEXL = @ILT+1265(?setLimits@Calc@@QAEXHHHHHHHHHHH@Z)
Summary
1000 .data
2000 .idata
5000 .rdata
2000 .reloc
1000 .rsrc
28000 .text
12000 .textbss
在Release配置中,文件只有10 kb,dumpbin这样说:
Dump of file C:\Redacted\Release\calcDLL.dll
File Type: DLL
Summary
1000 .data
1000 .rdata
1000 .reloc
1000 .rsrc
2000 .text
我使用Visual Studio Express2013。对我缺少的内容有任何想法吗?
最佳答案
您显示的所有内容都可以,所以我猜您只是忘记在发布配置的项目设置中设置导出文件。转到项目属性->链接器->输入并设置模块定义文件。
另外:因为没有删除calcObj,所以存在内存泄漏。但是实际上没有必要在此处使用堆,只需在堆栈上使用Calc calcObj;
。还知道将double转换为int会被截断,并且您是否想到如果数字> 2 ^ 31会发生什么?