0

在 Visual Studio 2008 中,使用 C++,我尝试使用http://msdn.microsoft.com/en-us/library/ms235636.aspx上的说明构建 DLL ,但我将源文件命名为扩展名为“. c”而不是建议的“.cpp”。

如果扩展名为 .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 for.c和 C++ for .cpp. -Tp您可以使用强制 C++ 或强制 C来覆盖该猜测-Tc。如果您希望传递的所有文件而不是仅一个文件,请大写 (-TP-TC)。

于 2012-05-31T23:32:40.600 回答