有关.NET的编译警告都要管吗??这个警告一头雾水........
vb吧
全部回复
仅看楼主
level 14
张剑冰 楼主
环境是 VS2017
API声明如下:
Friend Declare Sub keybd_event Lib "user32" Alias "keybd_event" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)
检查代码编译器报告一个警告如下:
警告 CA1901 如代码中所声明的,P/Invoke 'Module1.NativeMethods.keybd_event(Byte, Byte, Integer, Integer)' 的参数 'dwExtraInfo' 在 64 位 平台上的字节宽度将为 4。这是不
正确的
,因为此 API 的实际本机声明表明该参数在 64 位 平台上的字节宽度应为 8。请参考 MSDN Platform SDK 文档来获取帮助,确定应使用哪种数据类型来代替 'Integer'。 EasyTools E:\工程项目文件\简易小工具\EasyTools\Module1.vb 584
如果把最后一个参数写成 Long ,则仍然会报警告如下:
警告 CA1901 如代码中所声明的,P/Invoke 'Module1.NativeMethods.keybd_event(Byte, Byte, Integer, Long)' 的参数 'dwExtraInfo' 在 32 位 平台上的字节宽度将为 8。这是不正确的,因为此 API 的实际本机声明表明该参数在 32 位 平台上的字节宽度应为 4。请参考 MSDN Platform SDK 文档来获取帮助,确定应使用哪种数据类型来代替 'Long'。 EasyTools E:\工程项目文件\简易小工具\EasyTools\Module1.vb 584
感觉怎么改都是警告,但是代码运行倒是没问题,我是不是应该忽略这个警告??
2022年06月29日 06点06分 1
level 12
看你是要把程序编译成32位还是64位,如果是32位的话这个api每个参数占4字节,vbnet的4字节整数类型为integer,如果你用vb6的long那是要出错的,如果是64位,每个参数为8字节long就没有问题,其实全部用4字节的integer编译64位程序应该也不存在问题,因为这个api实参是不可能超出4字节的。编译器警告可以不管。vbnet没用过几次,像delphi有个nativeint类型,如果程序是32位它是int32,如果程序是64位它就是int64,不知道vbnet里有没有这种类型
2022年06月29日 12点06分 2
感谢,我再研究研究,.net 用的时间不长,刚刚入门。
2022年06月29日 13点06分
1