当前位置:编程学习 > VB >>

我在vb中用控制台API时发现了几个奇怪的地方

就是在用控制台api进行输入输出的时候在要求传入 输入输出句柄的地方 固定是那几个植
Option Explicit

Public Declare Function AllocConsole Lib "kernel32" () As Long

Public Declare Function WriteConsole Lib "kernel32" Alias "WriteConsoleA" (ByVal hConsoleOutput As Long, lpBuffer As Any, ByVal nNumberOfCharsToWrite As Long, lpNumberOfCharsWritten As Long, lpReserved As Any) As Long

Public Declare Function ReadConsole Lib "kernel32" Alias "ReadConsoleA" (ByVal hConsoleInput As Long, lpBuffer As Any, ByVal nNumberOfCharsToRead As Long, lpNumberOfCharsRead As Long, lpReserved As Any) As Long



Sub main()
    Dim a As String * 3
    AllocConsole
    WriteConsole 11, ByVal "hello_world", 12, 0, 0 '请问这里为啥固定是7或者是11
    ReadConsole 3, ByVal a, 2, 0, 0 '这里为什么固定又是3
End Sub

而且和GetStdHandle的结果是一样的 难道那几个植真的有什么含义么 vb 控制台 api kernel 参考:http://binaryworld.net/Main/CodeDetail.aspx?CodeId=2200#copy 查阅一下这个 这就是不用常量定义的坏处。
一切常数看起来都是魔法数,云山雾罩! 看不懂,你把a都设成定长串了不是3是什么 所有魔法数都在include\*.h文件中有定义。 console屏幕处理例子程序。终端窗口屏幕处理相关API使用例子。来自MSVC20\SAMPLES\win32\console\
http://download.csdn.net/detail/zhao4zhong1/3461309 没搞懂……
引用 5 楼 zhao4zhong1 的回复:
所有魔法数都在include\*.h文件中有定义。

魔法数的问题是编码规范的问题。
到哪里查资料可不属于编码规范。 问题在于:看 API的参数,应该是传入“句柄”。
  但实际调用时,传入的并不象是句柄呀。

引用 9 楼 Chen8013 的回复:
问题在于:看 API的参数,应该是传入“句柄”。
  但实际调用时,传入的并不象是句柄呀。

因为实际会用到getstdhandle函数,而getStdHandle的结果总是返回那几个值
下载一个好点的API浏览器吧, 包含了参数说明的.
推荐一个:  FoxAPI 
补充:VB ,  API
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,