.NET Framework:参数类型'uint'在P / Invoke上不符合CLS

时间:2009-11-25 15:22:08

标签: c# .net compact-framework pinvoke

忽略此警告是安全的吗?

参数类型'uint'不符合CLS

我正在开发一个Compact Framework应用程序,我有很多P / Invoke,我必须使用uint,ushort等作为参数的类型。

我已使用[CLSCompliantAttribute(false)]来避免警告消息,但我不知道它是安全的。

一些帮助会被贬低。

感谢。

2 个答案:

答案 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的补码)。