c ++新手并尝试测试dll但继续
warning C4273: 'CRootFinder::SquareRoot' : inconsistent dll linkage
RootFinder.h
#ifdef MY_EXPORTS
#define API _declspec(dllexport)
#else
#define API _declspec(dllimport)
#endif
class API CRootFinder {
public:
CRootFinder(void);
double SquareRoot(double v);
};
RootFinder.cpp
#include "stdafx.h"
#include "RootFinder.h"
double CRootFinder::SquareRoot(double v)
{
return 0.0;
}
构建但上面会收到警告。
在单元测试项目中添加了对dll的引用
unittest1.cpp
#include "stdafx.h"
#include "CppUnitTest.h"
#include "../c source/RootFinder.h"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
namespace Tests
{
TEST_CLASS(UnitTest1)
{
public:
TEST_METHOD(TestMethod1)
{
CRootFinder rooter;
Assert::AreEqual(
// Expected value:
0.0,
// Actual value:
rooter.SquareRoot(0.0),
// Tolerance:
0.01,
// Message:
L"Basic test failed",
// Line number - used if there is no PDB file:
LINE_INFO());
}
};
}
不会建立
错误2错误LNK2019:未解析的外部符号" __ declspec(dllimport)public:__ thishisall CRootFinder :: CRootFinder(无效)" (__imp _ ?? 0CRootFinder @@ @ QAE XZ) 在函数中引用" public:void __thiscall 测试:: UnitTest1 :: TestMethod1(无效)" (?TestMethod1 @ UnitTest1 @ Tests @@ QAEXXZ)
答案 0 :(得分:2)
使用MY_EXPORTS预处理器marco编译dll。添加在没有MY_EXPORTS定义宏的测试中使用它。
在Visual Studio中,您可以执行此操作:Project right click->Propertis->C/C++->Preprocessor->Preprocessor Definitions
,只需将MY_EXPORTS添加到dll项目的列表中,并将该列表保留为没有MY_EXPORTS用于测试项目。
您需要在CRootFinder()
中定义构造函数RootFinder.cpp
。