Не могу использовать класс из неявно связанных .dll - PullRequest
0 голосов
/ 20 мая 2018

У меня проблемы с использованием класса Shape из моего Shape.dll в моем ShapeTester.cpp (другой проект .dll.)

//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)

1 Ответ

0 голосов
/ 20 мая 2018

Ваш класс Shape должен быть вне блока #ifdef, а не внутри него.Код, как он есть, не будет объявлять класс Shape, пока не будет определен символ SHAPE_EXPORT.

То, что вы хотите сделать, это

#ifdef SHAPE_EXPORTS
#define SHAPE_API __declspec(dllexport)
#else
#define SHAPE_API __declspec(dllimport)
#endif

class SHAPE_API Shape
// etc
...