不能使用隐式链接的 .dll 中的 class
Cant use a class from an implicitly linked .dll
我在 ShapeTester.cpp(另一个 .dll 项目)中使用 Shape.dll 中的 class Shape
时遇到问题。
//Shape.h
#ifdef SHAPE_EXPORTS
#define SHAPE_API __declspec(dllexport)
class SHAPE_API Shape
{
public:
Shape();
Shape(int sides, int sideLength, int apothem);
~Shape();
int Perimeter();
double Area();
private:
int sides;
int sideLength;
int apothem;
};
#endif
------------------------------------------------------------
//Shape.cpp
#include "stdafx.h"
#include "Shape.h"
Shape::Shape() : sides(0), sideLength(0), apothem(0)
{
}
Shape::Shape(int sides, int sideLength, int apothem) : sides(sides), sideLength(sideLength), apothem(apothem)
{
}
Shape::~Shape()
{
}
double Shape::Area()
{
//implementation
}
int Shape::Perimeter()
{
//implementation
}
-----------------------------------------------------------
//ShapeTester.cpp (this is in another DLL project)
#include "stdafx.h"
#include "ShapesTester.h"
#include "Shape.h"
bool ShapesTester::Test()
{
Shape myShape = Shape(3, 9, 5); // error here; cant resolve symbol Shape
return myShape.Area() == 67.5;
}
我在预处理器指令中包含 SHAPE_EXPORT,我可以获得 .dll、.lib
属性 > 配置属性 > 链接器 > 输入 > 将附加依赖项设置为 Shape.lib
属性 > 配置属性 > 链接器 > 常规 > 附加库目录(指向 Shape.Lib 的位置)
属性 > 配置属性 > C/C++ > 附加包含目录(指向 Shape.h 的位置)
您的 Shape
class 应该在 #ifdef
块之外,而不是在其中。除非定义了 SHAPE_EXPORT
符号,否则代码不会声明 Shape
class。
你想做的是
#ifdef SHAPE_EXPORTS
#define SHAPE_API __declspec(dllexport)
#else
#define SHAPE_API __declspec(dllimport)
#endif
class SHAPE_API Shape
// etc
我在 ShapeTester.cpp(另一个 .dll 项目)中使用 Shape.dll 中的 class Shape
时遇到问题。
//Shape.h
#ifdef SHAPE_EXPORTS
#define SHAPE_API __declspec(dllexport)
class SHAPE_API Shape
{
public:
Shape();
Shape(int sides, int sideLength, int apothem);
~Shape();
int Perimeter();
double Area();
private:
int sides;
int sideLength;
int apothem;
};
#endif
------------------------------------------------------------
//Shape.cpp
#include "stdafx.h"
#include "Shape.h"
Shape::Shape() : sides(0), sideLength(0), apothem(0)
{
}
Shape::Shape(int sides, int sideLength, int apothem) : sides(sides), sideLength(sideLength), apothem(apothem)
{
}
Shape::~Shape()
{
}
double Shape::Area()
{
//implementation
}
int Shape::Perimeter()
{
//implementation
}
-----------------------------------------------------------
//ShapeTester.cpp (this is in another DLL project)
#include "stdafx.h"
#include "ShapesTester.h"
#include "Shape.h"
bool ShapesTester::Test()
{
Shape myShape = Shape(3, 9, 5); // error here; cant resolve symbol Shape
return myShape.Area() == 67.5;
}
我在预处理器指令中包含 SHAPE_EXPORT,我可以获得 .dll、.lib
属性 > 配置属性 > 链接器 > 输入 > 将附加依赖项设置为 Shape.lib
属性 > 配置属性 > 链接器 > 常规 > 附加库目录(指向 Shape.Lib 的位置)
属性 > 配置属性 > C/C++ > 附加包含目录(指向 Shape.h 的位置)
您的 Shape
class 应该在 #ifdef
块之外,而不是在其中。除非定义了 SHAPE_EXPORT
符号,否则代码不会声明 Shape
class。
你想做的是
#ifdef SHAPE_EXPORTS
#define SHAPE_API __declspec(dllexport)
#else
#define SHAPE_API __declspec(dllimport)
#endif
class SHAPE_API Shape
// etc