【问题标题】:How to DllImport enums in c#如何在 C# 中 DllImport 枚举
【发布时间】:2019-08-18 15:27:00
【问题描述】:

我在 c++ 中编译了一个 dll,其中包含一个需要在 c++ 项目和 c# 项目中使用的枚举。使用 c++ 项目没有问题,但在 c# 中弹出 DllImport 只能用于方法

我已经考虑过解决这个问题的函数,但结果一团糟。我只需要从 c# 访问 c++ 枚举

这是 dll 中的 c++ 枚举:

enum DLL_PUBLIC ByteCode
{
    // Stuffs...
};

这就是我尝试在 c# 中导入它的方式:

[DllImport("ByteCodes.dll", CallingConvention = CallingConvention.Cdecl)]
enum ByteCodes;

我知道DllImport 只能用于方法,但我需要它用于枚举。我能做什么?

【问题讨论】:

  • C++ 和 C# 并不总是易于互操作。它们是完全不同的语言,有着完全不同的做事方式——而且没有标准化的 ABI。
  • @JesperJuhl 所以我应该为 c# 创建第二个 DLL 并在每次编辑枚举时复制粘贴代码?这不是所有的工作,只是有点乱,但如果这是唯一的方法......
  • @Bonfra04 您不必重写 C# 中的所有代码,只需枚举声明(请参阅我的答案)。
  • DllExport 用于函数,而不是值,因此不需要在枚举上导出。

标签: c# c++ dll enums


【解决方案1】:

您可以在 C# 端将枚举的成员重新声明为简单的 const int 值。或者您可以简单地重新声明枚举,确保使用 = 1 等定义成员以匹配 C++ 声明。

【讨论】:

  • 是的,我想我会选择这个
  • @Bonfra04 并不是你有太多选择。无论如何,枚举都是not exported。然后在托管端重新声明是 方式,无论是作为常量还是作为枚举。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 2014-04-06
  • 2013-02-11
  • 2014-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多