找回密码
 立即注册
查看: 1335|回复: 10

飞龙可在?问一个VB的API的问题。

[复制链接]

477

回帖

1537

基友

3190

积分

通神5段 Lv.8

Rank: 4

发表于 2014-5-18 22:09:47 | 显示全部楼层 |阅读模式
  • 我在VB.net里用SetConsoleTextAttribute这个api的时候遇到了问题
  •    SetConsoleTextAttribute, 整数型, "kernel32","SetConsoleTextAttribute俩个参数
  •     参数 hConsoleOutput, HANDL
  •     参数 wAttributes, WORD
  • 这个修改输出颜色的API ,对应的我在用VB调用这个API的时候vs提示我类型不对,
  • Public Declare Function SetConsoleTextAttribute Lib  "kernel32" (ByVal hConsoleOutput As Long, ByVal wAttributes As Long) As Long
  • 参数和返回值我都给的long但是编译器报错了。
  • 错误信息:调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配,我怀疑是参数我给的类型不匹配导致的
  • 能指点一下吗?
@龙@龙

回复

使用道具 举报

477

回帖

1537

基友

3190

积分

通神5段 Lv.8

Rank: 4

 楼主| 发表于 2014-5-18 22:10:00 | 显示全部楼层
@龙
回复

使用道具 举报

3372

回帖

2万

基友

3万

积分

仙人9层 Lv.18

有事请@凉茶

Rank: 12Rank: 12Rank: 12

苍海的女仆会员纪念勋章

发表于 2014-5-18 22:15:10 | 显示全部楼层
@龙 。。。。。
回复

使用道具 举报

312

回帖

521

基友

1171

积分

通神3段 Lv.6

Rank: 3Rank: 3

发表于 2014-5-18 23:14:24 | 显示全部楼层
@龙
回复

使用道具 举报

555

回帖

1411

基友

3035

积分

通神5段 Lv.8

Rank: 4

发表于 2014-5-19 00:54:58 | 显示全部楼层
看着头晕
回复

使用道具 举报

1634

回帖

3460

基友

4703

积分

通神6段 Lv.9

Rank: 5Rank: 5

伯爵荣耀

发表于 2014-5-19 04:17:20 | 显示全部楼层
不懂。
这里是苍海国际,欢迎到来为苍海加油把!
回复

使用道具 举报

7657

回帖

86万

基友

34万

积分

天下一番

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

伯爵荣耀

发表于 2014-5-19 16:09:19 | 显示全部楼层
vb6的long为32位 vb.net的long为64位

handle在32位机器是32位 64位机器是64位的 最好用intptr
word是16位无符号的  用short或ushort
  1. Public Declare Function SetConsoleTextAttribute Lib  "kernel32" (ByVal hConsoleOutput As IntPtr, ByVal wAttributes As Short) As Integer
复制代码

回复 支持 反对

使用道具 举报

477

回帖

1537

基友

3190

积分

通神5段 Lv.8

Rank: 4

 楼主| 发表于 2014-5-19 16:45:21 | 显示全部楼层
龙 发表于 2014-5-19 16:09
vb6的long为32位 vb.net的long为64位

handle在32位机器是32位 64位机器是64位的 最好用intptr

厉害。你的回答是我想要的,再问一下32位机是不是不能用long这种64位的句柄,我之前取到的console的句柄是64位就会出错了。
回复 支持 反对

使用道具 举报

7657

回帖

86万

基友

34万

积分

天下一番

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

伯爵荣耀

发表于 2014-5-19 16:50:55 | 显示全部楼层
and1and1 发表于 2014-5-19 16:45
厉害。你的回答是我想要的,再问一下32位机是不是不能用long这种64位的句柄,我之前取到的conso ...

可以用long来储存句柄

但是函数传参的时候不一样 他是要压栈的 大小不一样就导致后面的参数错位了
回复 支持 反对

使用道具 举报

477

回帖

1537

基友

3190

积分

通神5段 Lv.8

Rank: 4

 楼主| 发表于 2014-5-19 17:36:03 | 显示全部楼层
龙 发表于 2014-5-19 16:50
可以用long来储存句柄

但是函数传参的时候不一样 他是要压栈的 大小不一样就导致后面的参数错位了

恩,谢谢了
回复 支持 反对

使用道具 举报

2034

回帖

2万

基友

2万

积分

仙人7层 Lv.16

Invincible

Rank: 10Rank: 10Rank: 10

发表于 2014-5-20 20:01:13 | 显示全部楼层
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
While the truncheon may be used in lieu of conversation words will always retain their power.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|苍海国际 ( 鲁ICP备13020644号-1 )

GMT+8, 2024-12-24 08:15 , Processed in 0.062146 second(s), 39 queries .

Powered by Discuz! Theme By eRic Modified by 4bpa

© CangHai International We Do Our Rights!

返回顶部