将枚举类型ref从c#传递到c++/将CLI包装器传递到c++

passing an enum type ref from c# to c++/CLI wrapper to c++

本文关键字:c++ CLI 包装 枚举 ref 类型      更新时间:2023-10-16

我已经搜索了很多答案,但无法找到一个。我有一个c++/CLI包装器连接我的c#和我的c++代码。我想传递一个指向实参的指针,作为run函数的输入形参的一部分,它将表示程序的状态。

在c++中,我定义了一个枚举:enum statusCode{INIT,BEGIN, CFG_STARTED, CFG_COMPLETED, STAGE1, STAGE2, DONE}

在我的c#代码中有相同的枚举:

   public enum statusCode
   {
        INIT, BEGIN, CFG_STARTED, CFG_COMPLETED, STAGE1, STAGE2, DONE
   }

我在c++代码中有一个run函数,它获得指向状态的指针:void Run(statusCode* status);

在c#中我使用:

public static statusCode program_status = statusCode.INIT;
wrapper.Run(ref program_status);

现在在c++/CLI界面我卡住了…

public ref class Wrapper 
{
 public:
 int run(System::String^ outputDir, statusCode% returnStatus);
}

在CPP文件中:

int CMSWrapper::run(statusCode% returnStatus)
{      
errorCode ret;
   ret = m_Controller->Run( static_cast<statusCode*>(returnStatus)); 
return ret;
}

我只是不知道如何声明运行函数以及如何在包装器(CLI/c++)中描述它

你不需要在c++/CLI中声明枚举,你只需要在c#和c++/CLI代码引用的共享程序集中声明枚举,这样你就可以在两个地方使用它。

例如

public enum statusCode
{
   INIT, BEGIN, CFG_STARTED, CFG_COMPLETED, STAGE1, STAGE2, DONE
}

然后在c#和c++/CLI项目中引用这个shared.dll,并在需要时使用枚举