2016-08-22 53 views
1

在我的C++ DLL項目中,當我在Debug配置中構建項目時,它完美地工作。對於其餘函數構建發佈配置時DLL函數未導出

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; 
} 

等等:

功能使用的是DEF文件導出:

LIBRARY "calc" 
EXPORTS 
findMaxFreqEXL = findMaxFreq 
findMinSpeedEXL = calcMinSpeed 
findMaxSpeedEXL = calcMaxSpeed 
createProfileEXL = createProfile 
arrayTestEXL = arrayTest 
setLimitsEXL = setLimits 

而這些功能在我的項目中的所有定義。

生成的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([email protected]@[email protected]) 
     2 1 00013460 createProfileEXL = @ILT+1115([email protected]@[email protected]) 
     3 2 000138E8 findMaxFreqEXL = @ILT+2275([email protected]@[email protected]) 
     4 3 00013744 findMaxSpeedEXL = @ILT+1855([email protected]@[email protected]) 

     5 4 00013500 findMinSpeedEXL = @ILT+1275([email protected]@[email protected]) 

     6 5 000134F6 setLimitsEXL = @ILT+1265([email protected]@@[email protected]) 

Summary 

    1000 .data 
    2000 .idata 
    5000 .rdata 
    2000 .reloc 
    1000 .rsrc 
    28000 .text 
    12000 .textbss 

在版本配置的文件只有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 Express 2013.關於我缺少的任何想法?

+1

我認爲處理器宏可能有問題。 – Afshin

+0

@Afshin說:不是發佈相當不相關的完整dumpbin輸出,而是發佈如何在代碼中導出函數。 – stijn

+0

@stijn:添加了導出函數的代碼... – DrDonut

回答

2

你顯示的東西有點不錯,所以我的猜測是你忘記在發佈配置的項目設置中設置了exports文件。轉至項目屬性 - >連接器 - >輸入並設置模塊定義文件。

另外:你有內存泄漏,因爲你不刪除calcObj。但實際上沒有理由在這裏使用堆,只需在堆棧上使用Calc calcObj;即可。也知道把double轉換爲int會被截斷,並且你有沒有想過如果數字> 2^31會發生什麼?

+0

您好,先生真棒!你對內存泄漏是正確的,我忘記了我還沒有修復那部分......整數應該是整數,但是excel將它們視爲雙精度,所以截斷是沒有問題的,溢出部分在另一方面... – DrDonut