VS2015 - 使用C ++ DLL链接CRL

时间:2017-06-26 02:51:32

标签: c# c++ visual-studio clr

我是一名C#程序员,我正在尝试制作一个C ++ / CLI包装器。我在解决方案中有三个项目:

  • C ++ DLL
  • C ++ CLR
  • WPF C#

我只是在做测试,所以我得到了这些实现:

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

我无法弄清楚解决方案。 感谢。

1 个答案:

答案 0 :(得分:0)

好的,我设法让它运转起来。这很简单。

我查了this link而我错过了这个:

// C++ DLL Header
#ifdef TESTING_EXPORTS  
    #define TESTING_API __declspec(dllexport)   
#else  
    #define TESTING_API __declspec(dllimport)   
#endif

在包装器上,我刚刚将标题位置添加到其他包含目录(链接器未更改),我只是开箱即用。