忽略此警告是安全的吗?
参数类型'uint'不符合CLS
我正在开发一个Compact Framework应用程序,我有很多P / Invoke,我必须使用uint,ushort等作为参数的类型。
我已使用[CLSCompliantAttribute(false)]
来避免警告消息,但我不知道它是安全的。
一些帮助会被贬低。
感谢。
答案 0 :(得分:14)
如果您没有编写其他人使用其他语言的组件,那么您不需要符合CLS。只是声明你不是(正如你已经做过的那样)。
但是,可以在内部使用uint并仍然提供符合CLS的接口。 Writing CLS-Compliant Code.
(链接更新)
答案 1 :(得分:3)
您可以安全地将符合CLS的签名类型替换为相同大小的非CLS兼容无符号类型。
以下内容实际上是相同的(我在pinvoke.net上找到的第一个User32函数):
[DllImport("user32.dll")]
static extern int ActivateKeyboardLayout(IntPtr nkl, uint Flags);
[DllImport("user32.dll")]
static extern int ActivateKeyboardLayout(IntPtr nkl, int Flags);
有符号和无符号位字段的行为相同。你可能遇到问题的唯一地方是你需要传递或接收真正庞大的数字,这些数字会映射到负数(查找2的补码)。