0

Visual Studio 2008では、C ++を使用して、 http://msdn.microsoft.com/en-us/library/ms235636.aspxの手順を使用してDLLを構築しようとしましたが、拡張子が「」のソースファイルに名前を付けました。提案された「.cpp」ではなく「c」。

拡張子が.cの場合、コンパイラーは37個のエラーをスローします。拡張子が.cppの場合、DLLは正常にビルドされます。

ソースファイルの拡張子はどのような違いがありますか?

完全なコードは次のとおりです。

// MathFuncsDll.cpp
// compile with: /EHsc /LD

#include "MathFuncsDll.h"

#include <stdexcept>

using namespace std;

namespace MathFuncs
{
    double MyMathFuncs::Add(double a, double b)
    {
        return a + b;
    }

    double MyMathFuncs::Subtract(double a, double b)
    {
        return a - b;
    }

    double MyMathFuncs::Multiply(double a, double b)
    {
        return a * b;
    }

    double MyMathFuncs::Divide(double a, double b)
    {
        if (b == 0)
        {
            throw new invalid_argument("b cannot be zero!");
        }

        return a / b;
    }
}




// MathFuncsDll.h

namespace MathFuncs
{
    class MyMathFuncs
    {
    public:
        // Returns a + b
        static __declspec(dllexport) double Add(double a, double b);

        // Returns a - b
        static __declspec(dllexport) double Subtract(double a, double b);

        // Returns a * b
        static __declspec(dllexport) double Multiply(double a, double b);

        // Returns a / b
        // Throws DivideByZeroException if b is 0
        static __declspec(dllexport) double Divide(double a, double b);
    };
}
4

3 に答える 3

8

拡張子が.c、の場合、コンパイラはそれをCとしてコンパイルします。の場合、コンパイラは.cppそれをC++としてコンパイルします。

于 2012-05-31T23:30:07.180 に答える
3

コンパイラがファイルをC++ファイルではなくCファイルとして解釈している可能性があります。

于 2012-05-31T23:29:53.513 に答える
3

コンパイラ (ドライバ プログラム) は、拡張子に基づいてソース言語を推測し.cます.cpp。その推測をオーバーライドして、-TpC++ を強制するか、C を強制することができます-Tc。1 つだけではなく、渡すすべてのファイルに対してそれが必要な場合は、(-TPまたは-TC) を大文字にします。

于 2012-05-31T23:32:40.600 に答える