没有.cpp文件,C#无法识别C ++ / CLI名称空间

时间:2019-03-07 19:38:56

标签: c# c++-cli clr

我有一个CLR解决方案,其中C#项目引用了Managed C ++项目。 C#入口点是Program.cs:

using System;
using System.Runtime.ExceptionServices;
using ManagedCpp;

class Program
{
    [HandleProcessCorruptedStateExceptions]

    static void Main(string[] args)
    {

        ManagedClass mc = new ManagedClass();
    }
}

ManagedCpp.h

#include "NativeClass.h"
namespace ManagedCpp {

public ref class ManagedClass
{
private:
    NativeClass* _ptr = nullptr;

public:
    ManagedClass() { _ptr = new NativeClass(); };
    ~ManagedClass() { if (_ptr) { delete _ptr; _ptr = nullptr; } };

    void ThrowException() {
        try
        {
            _ptr->ThrowException();
        }
        catch (std::exception e)
        {
            throw gcnew System::Exception(gcnew System::String(e.what()));
        }
    }

};
}

编译Managed C ++项目并运行后,它会发出此错误:

Error   CS0246  The type or namespace name 'ManagedCpp' could not be found (are you missing a using directive or an assembly reference?)

但是,如果我将功能主体从ManagedCpp.h移至ManagedCpp.cpp文件。该程序运行没有问题:

新的ManagedCpp.h

#include "NativeClass.h"
namespace ManagedCpp {


public ref class ManagedClass
{
private:
    NativeClass* _ptr = nullptr;

public:
    ManagedClass();
    ~ManagedClass();

    void ThrowException() {
        try
        {
            _ptr->ThrowException();
        }
        catch (std::exception e)
        {
            throw gcnew System::Exception(gcnew System::String(e.what()));
        }
    }

};
}

新的ManagedCpp.cpp文件:

#include "stdafx.h"
#include "ManagedCpp.h"

ManagedCpp::ManagedClass::ManagedClass() { _ptr = new NativeClass(); }
ManagedCpp::ManagedClass::~ManagedClass() { if (_ptr) { delete _ptr; _ptr = nullptr; } }

两者之间有什么区别?为什么在后一种情况下C#可以看到名称空间,而在第一种情况下却看不到?

0 个答案:

没有答案