2016-08-22 5 views
1

私のC++ DLLプロジェクトでは、プロジェクトをデバッグ構成でビルドすると完全に動作します。機能の残りのようにリリース構成でビルドすると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キロバイトで、DUMPBINによると、これらはエクスポートされた関数です:

Release構成で
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キロバイトと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

あなたが見せてくれるものは一種のものなので、リリース構成のプロジェクト設定でエクスポートファイルを設定するのを忘れています。プロジェクトプロパティ - >リンカ - >入力に進み、モジュール定義ファイルを設定します。

また、calcObjを削除しないため、メモリリークが発生しています。しかし、実際にはここでヒープを使用する理由はありません。ただスタックにCalc calcObj;を使用してください。また、intをdoubleにキャストすることは切り捨てられていることも知っています。そして、数値が2^31以上なら何が起こるか考えましたか?

+0

あなたは最高です!そして、あなたはメモリリークについて正しいですが、私はまだその部分を修正していなかったことを忘れていました...整数は整数であると考えられますが、Excelをdoubleとして読み込むので、切り捨ては問題ありません。一方... – DrDonut

関連する問題