【问题标题】:how to read constants from .h file in C#如何在 C# 中从 .h 文件中读取常量
【发布时间】:2011-09-27 11:17:32
【问题描述】:

我想读取 C# 中的常量,这些常量在 C++ 的 .h 文件中定义。谁能告诉我如何在 C# 中执行此操作? C++ .h 文件如下所示:

#define MYSTRING1 "6.9.24 (32 bit)"
#define MYSTRING2 "6.8.24 (32 bit)"

我想用 C# 阅读这个?

【问题讨论】:

  • 您需要在 StreamReader 中打开文件并读取每一行。
  • 不,我不想逐行阅读。我想在我的 C# 变量中获取 .h 文件中定义的所有常量。
  • 将.h 文件转换为具有MYSTRING1 等公共静态属性的C# 类的代码可以吗?或者你能具体说明你想如何使用它吗?最好带有一些代码示例。另外,所有的常量都是字符串吗?
  • 在我的 .h 文件中......有常量,我想阅读特定的。我想使用一些可以为我做的包装类,但不知道该怎么做:)。我知道包装类可以与非托管代码交互,但完全可以得到细节。

标签: c# c++


【解决方案1】:

这是一个非常简单的答案,您可以在 .h 文件的每一行上使用它来提取字符串值。

string GetConstVal(string line)
{
  string[] lineParts = string.Split(line, ' ');
  if (lineParts[0] == "#define")
  {
    return lineParts[2];
  }
  return null;
}

因此,只要它返回 null,您就没有常量。现在请记住,它只获取常量的值,而不是名称,但您可以轻松修改代码以通过 out 参数等返回该值。

如果您想表示其他数据类型,例如整数等,您将不得不想出一些聪明的办法,因为 C++ 中的宏并不能真正算作类型安全。

【讨论】:

  • 我读到了可以随时更改的常量意味着名称等...我只想获取一些特定的常量...在您提出的解决方案中如果常量名称更改了,那么如何获得是吗?
  • 列出的代码根本没有考虑名称。此外,如果您正在寻找一个特定的常量并且它的名称发生了变化,那么您无能为力。无论哪个人更改了常量的名称,都必须更改他们正在寻找的内容。
【解决方案2】:

你有两个选择:

1- 创建一个 C++ 包装器代码,用于包装这些宏,将此代码导出到 lib 或 dll 并在 C# 中使用。

2- 从您的代码中读取/解析 .h 文件,并在运行时获取值。

【讨论】:

  • 请告诉我这个 Wrapper 类的目的是什么,我如何使用它以及它的功能?我对此解决方案感兴趣。
  • @AsadIqbal - 您似乎不具备执行第二个选项所需的知识。
猜你喜欢
  • 2013-09-15
  • 1970-01-01
  • 2019-08-14
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 2019-08-06
  • 1970-01-01
相关资源
最近更新 更多