关于APIVIEWER的问题

slowgrace 2009-04-17 01:56:08
APIVIEWER可以用来帮助生成API的声明,直接拷贝到程序里,挺方便的。我用的是APIVIEWER 2004 VERSION 3.10

使用中有两个问题

(1)为什么有的类型声明找不到啊?比如我要找NMTREEVIEW就没有,却能找到NMLISTVIEW

(2)有的常数有两个,一个以A结尾,一个以W结尾,这有什么区别?分别该在什么情况下用?比如TVN_SELCHANGED就有两个
Public Const TVN_SELCHANGEDA As Long = (TVN_FIRST-2)
Public Const TVN_SELCHANGEDW As Long = (TVN_FIRST-51)
...全文
247 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
东方之珠 2009-04-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 slowgrace 的帖子:]
APIVIEWER可以用来帮助生成API的声明,直接拷贝到程序里,挺方便的。我用的是APIVIEWER 2004 VERSION 3.10

使用中有两个问题

(1)为什么有的类型声明找不到啊?比如我要找NMTREEVIEW就没有,却能找到NMLISTVIEW

(2)有的常数有两个,一个以A结尾,一个以W结尾,这有什么区别?分别该在什么情况下用?比如TVN_SELCHANGED就有两个
Public Const TVN_SELCHANGEDA As Long = (TVN_FIRST-2)
Public Const TVN_SELCH…
[/Quote]


操作字符串的API会碰到第二个问题。在声明这样的API时,会指定字符集,每个含有字符串的API同时有两个版本:即ANSI,Unicode。尾部带A的API是ANSI版本,带W的API是Unicode版本。
例如:SetWindowTextA,是ANSI函数:WINUSERAPI BOOL WINAPI SetWindowTextA(HWND hWnd, LPCSTR lpString);
在声明时必须用Alias子句:
Private Declare Function SetWindowText Lib "user32.dll" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long

而SetWindowTextW,是Unicode函数:WINUSERAPI BOOL WINAPI SetWindowTextW(HWND hWnd, LPCWSTR lpString);
必须这样声明:
Private Declare Function SetWindowText Lib "user32.dll" Alias "SetWindowTextW" (ByVal hwnd As Long, ByVal lpString As Long) As Long

chenhui530 2009-04-17
  • 打赏
  • 举报
回复
WINDOWS源码里你要找什么都能找到
slowgrace 2009-04-17
  • 打赏
  • 举报
回复
那你们的API声明都是从哪里找的?哪里能找到最全的?
东方之珠 2009-04-17
  • 打赏
  • 举报
回复
第一个问题:同意楼上的。
第二个问题:实际上,有很多Windows API常数就是一字之差,其用途不一样,含义不一样,没什么奇怪的。只不过用于不同的API罢了。比如:SendMessage ,实际上在user32.dll中真正的函数名是SendMessageA,那么相应的API常数就不能用后缀带有W的,而后缀带有W的API函数及API常数一般来说用于服务器版操作系统,只是一个比喻,不太恰当,想表达这个意思!欢迎批评指正!
SYSSZ 2009-04-17
  • 打赏
  • 举报
回复
本来就有一些API不在APIVIEWER,这主要是版本问题,windows版本高了,就新加一些API,APIVIEWER又不会更新
神马都能聊 2009-04-17
  • 打赏
  • 举报
回复
第二个问题,给你个链接,有点难
看星星很方便 - -

http://topic.csdn.net/u/20081223/18/9E5CEC7B-5025-460A-BA30-2BC85704BEB8.html

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧