在人们将这个问题分开之前,我会解释我想要做的事情。
我目前有一个可以访问共享内存的C程序。 C程序通过#defined偏移导航此共享内存。例如:
#define VAR_1 0x2000
现在我有一个C#程序显示来自此共享内存的数据。我正在尝试确定如何使用我的C程序使用的#defines,让我的C#程序也引用它们。
我试图避免需要维护包含这些定义的两个文件。
因此,C#程序有没有办法使用.h文件中的#defines?
谢谢,
答案 0 :(得分:1)
#define
指令不能用于声明常量值 通常用C和C ++完成。 C#中的常量最好定义为 类或结构的静态成员。如果你有几个这样的 常数,考虑创建一个单独的"常数"上课 它们。
你可以这样做:
constants.cs:
#if __STDC__
#define public
#else
namespace foo
{
class Constants {
#endif
public const int VAR_1 = 0x2000;
#if __STDC__
#undef public
#else
}
}
#endif
main.c中:
#include <stdio.h>
#include "constants.cs"
int main(void)
{
printf("%d\n", VAR_1);
return 0;
}
的Program.cs:
using System;
namespace foo
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Constants.VAR_1);
}
}
}
这导致:
$ gcc -Wall -Wpedantic main.c && ./a.out
8192
$ dotnet run
8192
这是在C中使用const int
而不是#define
,但这可能是您愿意做出的权衡。