【问题标题】:passing an enum type ref from c# to c++/CLI wrapper to c++ [duplicate]将枚举类型 ref 从 c# 传递到 c++/CLI 包装器到 c++ [重复]
【发布时间】:2015-05-21 21:58:04
【问题描述】:

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

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

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

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

我在 C++ 代码中有一个运行函数,它获取指向状态的指针: 无效运行(状态码*状态);

在我使用的 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++)

【问题讨论】:

  • 鸡和蛋,改为在 C++/CLI 代码中声明枚举。使用 `public enum class StatusCode { Init, Begin, ... };

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


【解决方案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 并根据需要使用枚举

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多