我尝试为我的最终项目修改Wiimote Whiteboard应用程序。但我在编程语言C#方面的经验很少。
我不知道几行代码的含义是什么。有谁可以帮助我?
Guid HumanInterfaceDeviceServiceClass_UUID = new Guid(0x00001124, 0x0000, 0x1000, 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB);
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = BLUETOOTH_MAX_NAME_SIZE)]
public string szName;
答案 0 :(得分:0)
第一行是Guid
的实例化。它是一个非常具体的Guid
,其值传递给它作为相应的Guid
值。
第二行是Attribute
,用于指定应用它的变量如何在托管代码和非托管代码之间进行编组。如果“编组”一词对你来说很陌生...... I suggest you read up on it要了解更多。
第三行是应用了上述属性的字符串变量。
答案 1 :(得分:0)
第一行只是创建一个全球唯一标识符(GUID) 有关详细信息,请参阅MSDN:http://msdn.microsoft.com/en-us/library/system.guid(v=vs.110).aspx
接下来,声明字符串变量szName并使用一个属性进行修饰,该属性定义了如何通过非托管代码对其进行“编组”,即de / encoded。
答案 2 :(得分:0)
MarshalAs
用于托管代码和非托管代码之间的互操作。在C#中,string
始终为UTF-16
。在C中,由于没有内置的字符串类型,有时你必须提示运行时关于本机代码的期望(它应该是ascii / unicode?char / wchar_t?在堆栈/堆上?null-terminated / fixed -width /二者?)。
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = BLUETOOTH_MAX_NAME_SIZE)]
public string szName;
在这种情况下,您明确告诉运行时,szName
在被编组为非托管代码时应表示为BSTR
(大小= BLUETOOTH_MAX_NAME_SIZE
)。有关BSTR
究竟是什么的说明,请参阅:Eric's Complete Guide To BSTR Semantics