我是一名C#程序员,我正在尝试制作一个C ++ / CLI包装器。我在解决方案中有三个项目:
我只是在做测试,所以我得到了这些实现:
C ++ DLL Testing.h:
class Test
{
public:
Test();
~Test();
int Increment();
private:
int counter = 5;
};`
C ++ DLL Testing.cpp
#include "Testing.h"
int Test::Increment()
{
return counter++;
}
CLR Wrapper.h
#pragma once
#include "Testing.h"
using namespace System;
namespace Wrapper
{
public ref class Wraptest
{
public:
Wraptest();
int Increment();
private:
Test* t;
};
}
CLR Wrapper.cpp
#include "stdafx.h"
#include "Wrapper.h"
#include "PITest.h"
Wrapper::Wraptest::Wraptest()
{
t = new Test();
}
int Wrapper::Wraptest::Increment()
{
return t->Increment();
}
我在Wrapper项目中添加了对Testing C ++ DLL项目的引用。我还将DLL解决方案头文件添加到包装器的其他包含中。
C ++ DLL项目构建良好,但是当我构建Wrapper项目时,我得到了这些错误:
严重级代码描述项目文件行抑制状态 错误LNK2028未解析的令牌(0A000007)“public:__thiscall Test :: Test(void)”(?? 0Test @@ $$ FQAE @ XZ)在函数“public:__ clrcall Wrapper :: Wraptest :: Wraptest(void)”中引用( ?? 0Wraptest @ Wrapper @@ $$ FQ $ AAM @ XZ)包装器C:\ Users \ mytoy \ Documents \ Visual Studio 2015 \ Projects \ CodeTest \ Wrapper \ Wrapper.obj 1
严重级代码描述项目文件行抑制状态 错误LNK2019未解析的外部符号“public:__thiscall Test :: Test(void)”(?? 0Test @@ $$ FQAE @ XZ)在函数“public:__ clrcall Wrapper :: Wraptest :: Wraptest(void)”中引用(?? 0Wraptest @ Wrapper @@ $$ FQ $ AAM @ XZ)包装器C:\ Users \ mytoy \ Documents \ Visual Studio 2015 \ Projects \ CodeTest \ Wrapper \ Wrapper.obj 1
严重级代码描述项目文件行抑制状态 错误LNK1120 2未解析的外部包装器C:\ Users \ mytoy \ Documents \ Visual Studio 2015 \ Projects \ CodeTest \ Debug \ Wrapper.dll 1
我无法弄清楚解决方案。 感谢。
答案 0 :(得分:0)
好的,我设法让它运转起来。这很简单。
我查了this link而我错过了这个:
// C++ DLL Header
#ifdef TESTING_EXPORTS
#define TESTING_API __declspec(dllexport)
#else
#define TESTING_API __declspec(dllimport)
#endif
在包装器上,我刚刚将标题位置添加到其他包含目录(链接器未更改),我只是开箱即用。