0

dll のビルドを開始するたびに、次のエラーが表示されます: 致命的なエラー LNK1169: 1 つ以上の複数定義されたシンボルが見つかりました

ソースからコピーしたため、コードに問題はないと思います。

ExoDll1.cpp

#include "stdafx.h"

double BoxArea(double L, double H, double W);
double BoxVolume(double L, double H, double W);
extern "C" __declspec(dllexport)void BoxProperties(double Length, double Height,
                                double Width, double& Area, double& Volume);

BOOL APIENTRY DllMain( HANDLE hModule, 
                   DWORD  ul_reason_for_call, 
                   LPVOID lpReserved
                 )
{
    return TRUE;
}

double BoxArea(double L, double H, double W)
{
    return 2 * ((L*H) + (L*W) + (H*W));
}

double BoxVolume(double L, double H, double W)
{
    return L * H * W;
}

void BoxProperties(double L, double H, double W, double& A, double& V)
{
A = BoxArea(L, H, W);
V = BoxVolume(L, H, W);
}

新しいプロジェクトを作成して古いプロジェクトを削除しようとしましたが、同じ問題がまだ存在します..何が問題だと思われますか?

4

2 に答える 2

1

このエラーは、コンパイラからではなく、リンカから発生します。これは、コンパイラが何も問題を検出しなかったことを意味します。特に、1 つのコンパイル単位でシンボルの重複定義が検出されませんでした。ただし、.dll ライブラリを生成するリンカーは、いくつかのコンパイル ユニットをロードし、コンパイル ユニットでシンボルの重複定義を検出しました。

これは、複数のコンパイル単位に外部リンケージを持つ同じコードが含まれている場合、つまり#includeソース コードを取得した場合、またはヘッダー ファイル (複数#includeのコンパイル単位) で関数が定義されていて宣言されていない場合に発生しinlineます。

于 2012-06-14T08:56:34.840 に答える