将cum的枚举类型ref传递给c ++ / CLI包装器到c ++

时间:2015-05-21 21:58:04

标签: c# c++ enums c++-cli

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

在c ++中我定义了一个枚举: 枚举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;
}

我只是想弄清楚如何声明Run函数以及如何在包装器中描述它(CLI / C ++)

1 个答案:

答案 0 :(得分:1)

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

例如,

在C#shared.dll

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

然后在C#和C ++ / CLI项目中引用此shared.dll并根据需要使用枚举