gpt4 book ai didi

c# - 将十六进制枚举参数从 C# 传递到 C

转载 作者:太空狗 更新时间:2023-10-29 15:39:03 25 4
gpt4 key购买 nike

我在 C 中有一个接受十六进制参数的函数。我需要从 C# 调用此函数。我当前的方法似乎不正确,因为我的 C 函数返回了错误的数字。

这是我的 C 函数的声明:

enum tags {
TAG_A = -1,
TAG_B = 0x00,
TAG_C = 0xC1,
...
};
int myfunction(enum tags t);

这是我的 C# 代码:

enum tags {
TAG_A = -1,
TAG_B = 0x00,
TAG_C = 0xC1,
...
}

[DllImport ("mylibraryname")]
public static extern int myfunction(tags t);

myfunction(tags.TAG_B);

我在 Mac 上使用 Mono 和 Xcode 来完成所有这些工作。 C函数可以假设是正确的,因为它是我下载的一个开源库。我认为十六进制数有问题,但我不确定。

解决方案:

我已经勾选了一个答案,但实际上将 C# 枚举设置为 long 解决了我的问题。所以在 C# 中,我有:

enum tags : long { TAG_A = -1, TAG_B = 0x00, TAG_C = 0xC1, ... }

最佳答案

十六进制只是表示文字整数值的一种不同方式。与你的问题无关。例如 TAG_B = 0x00TAG_B = 0 都表示完全相同的东西。

问题可能在于 C enum 是 16 位整数,而 C# enum 是 32 位。与其在 C# 中创建枚举,不如尝试将其直接作为 Int32 值:

static class tags 
{
public static short TAG_A = -1;
public static short TAG_B = 0x00;
public static short TAG_C = 0xC1;
// ...
}

[DllImport ("mylibraryname")]
public static extern int myfunction(short t);

myfunction(tags.TAG_B);

或者,正如 L.B 所建议的,您可以只设置 enum 成员的类型:

enum tags:short 
{
TAG_A = -1,
TAG_B = 0x00,
TAG_C = 0xC1,
// ...
}

关于c# - 将十六进制枚举参数从 C# 传递到 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13454385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com