在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);
};
}
答案 0 :(得分:8)
当扩展名为.c
时,编译器将其编译为C.当它为.cpp
时,它将其编译为C ++。
答案 1 :(得分:3)
可能编译器将文件解释为C文件,而不是C ++文件。
答案 2 :(得分:3)
编译器(驱动程序)根据扩展名猜测源语言,假设.c
为C,.cpp
为C ++。您可以使用-Tp
覆盖该猜测以强制C ++或-Tc
强制使用C.如果您想要传递的所有文件而不是一个,则大写(-TP
或{{1 }})。