gpt4 book ai didi

c# - 从 C# 传递位值

转载 作者:太空狗 更新时间:2023-10-29 20:30:37 25 4
gpt4 key购买 nike

我有一个 C++ 接口(interface),它有一个公共(public)属性“P”,它接受 5、6、7 等位值。它的文档说:“设置组类型的位掩码。位 5 用于‘a’,位 6 用于‘b’,等等。”

我在我的 C# 类中使用这个接口(interface),元数据中显示的这个属性“P”的类型在 VS.Net 中是“char”。

如何从我的 C# 代码中将位值 6 和 7 传递给此属性?请注意,如上所述,“char”类型的值应该从 C# 传递到此 C++ 接口(interface),因为这是在 VS.net 的元数据中显示的类型

请推荐。代码:

从 VS.Net IDE 看到的 C++ 接口(interface)定义--

[SuppressUnmanagedCodeSecurity]
[Guid("f274179c-6d8a-11d2-90fc-00806fa6792c")]
[InterfaceType(1)]
public interface IAccount
{
char GroupType { get; set; }
}

C#:

IAccount objAccount= new AccountClass();
((IAccount)objAccount).GroupType = ??//I need to pass char value here

谢谢。

最佳答案

您可以使用继承自“byte”的“枚举”类型:

[Flags]
enum BitFlags : byte
{
One = ( 1 << 0 ),
Two = ( 1 << 1 ),
Three = ( 1 << 2 ),
Four = ( 1 << 3 ),
Five = ( 1 << 4 ),
Six = ( 1 << 5 ),
Seven = ( 1 << 6 ),
Eight = ( 1 << 7 )
}

void Main()
{
BitFlags myValue= BitFlags.Six | BitFlags.Seven;

Console.WriteLine( Convert.ToString( (byte) myValue, 2 ) );
}

输出:1100000

您需要发布有关 native 方法的更多信息以及如何调用它,以便进一步提供帮助。

[SuppressUnmanagedCodeSecurity]
[Guid("f274179c-6d8a-11d2-90fc-00806fa6792c")]
[InterfaceType(1)]
public interface IAccount
{
byte GroupType { get; set; } // char in native C++ is generally going to be 8 bits, this = C# byte
}

IAccount objAccount= new AccountClass();

( ( IAccount ) objAccount ).GroupType = ( byte )( BitFlags.Six | BitFlags.Seven );

关于c# - 从 C# 传递位值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6438641/

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