| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1470 人关注过本帖
标题:调用api messagebox的问题,请问是否一定要先定义?
只看楼主 加入收藏
onepc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:223
专家分:569
注 册:2009-8-27
结帖率:54.55%
收藏
已结贴  问题点数:20 回复次数:7 
调用api messagebox的问题,请问是否一定要先定义?
如我要用
invoke MessageBox,NULL,这里内容,这里内容,MB_OK
这里的标题与内容是否一定要全局变量?
我在子程序里的时候要用message如何显示???
invoke MessageBox,NULL,这里内容,这里内容,MB_OK
可以直接赋值么?若是可以的话用什么?//
还有子程序的局部变量如何赋值????是否一定要mov之类的?

比如别的语言
MessageBox(0,"kkk","aaa",0);
这里可以不直接写内容。
void aaa();
void aaa()
{
int x,y;
x=11,y=22; //这里的过程可以这样赋值。汇编的子程序如何赋呢/。
cout<<x+y<<endl;
}
搜索更多相关主题的帖子: 定义 messagebox api 
2009-09-07 15:48
swp160108
Rank: 2
等 级:论坛游民
威 望:4
帖 子:63
专家分:98
注 册:2008-11-10
收藏
得分:0 
只要是字符串指针就可以 不一定是全局变量
赋值只能是mov
2009-09-07 16:58
onepc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:223
专家分:569
注 册:2009-8-27
收藏
得分:0 
local @xx
             invoke RtlZeroMemory,addr @xx,Sizeof @xx
             mov @xx,'aaa'   ;这里四个a就不行了,api显示的有乱码
             mov eax,uMsg
 invoke MessageBox,NULL,addr @xx,addr @xx,MB_OK
这里我只能这样赋值么?/是否只能这样啊。还有别的方法么?这样的话会少一个字节没用。。可否我要四个a。又因api要空字符结尾,所以要加个0,。。。用什么连接与0连接呢????
2009-09-08 08:42
swp160108
Rank: 2
等 级:论坛游民
威 望:4
帖 子:63
专家分:98
注 册:2008-11-10
收藏
得分:10 
字符串的赋值要用函数lstrcpy 你不是学过c吗
2009-09-08 09:29
onepc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:223
专家分:569
注 册:2009-8-27
收藏
得分:0 
看过c++ primer plus  五版啊。
调用lstrcpy这个函数么?
谢谢。我看下。
2009-09-08 09:38
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:10 
这种赋值方式无疑是正确的,但对程序员来说不是唯一的选择.
实际上在汇编中任何数据变量类型,都可以看作一个字节缓冲区,其区别仅是大小不同而已(sizeof(Type))。
这样来看,字符串变量可以看成是大小不固定的字节换冲区。高级语言中的字符串类会对自身包含的字符串大小有一个计数器描述。
譬如在一个C++的String类中的数据成员可以是这样:引用计数 字符串大小 字符串。这样的好处是操作起来非常简便。数据大小一目了然。
缺点是占用空间较大。
而在C中对字符串的描述就是一个以零结束的字符数组。所以它的大小引用每次都要进行计算。
WIN32汇编中对字符串的操作可以有两种形式:
1、指令级
2、API级
指令级就是上面所说的MOVS、LOADS、SCANS、STOS等一系列操作指令。(高效、灵活。但处理繁琐.适合个别字符或特种用途处理)
API级用lstrcpy、lstrcmp、lstrlen、lstrcat等字符串操作函数。(高效、便捷。适合普遍场合)。
举一例:
StrProcess Proc uses esi
local szTemp[128]: Byte                                        ;局部字符串缓冲区
    lea esi,szTemp                                             ;地址放入esi
  
    invoke RtlZeroMemory,esi,128                               ;初始化为0
    invoke lstrcpy esi,CTEXT("This is a Test Str!")            ;高级操作,赋值,其中CTEXT为字符串定义宏

    mov byte ptr[esi + 1],'X'                                  ;低级操作,修改串第二字符为'X"
    invoke MessageBox,NULL,esi,esi,MB_OK | MB_ICONINFO         ;输出
StrProc endp
以上个人浅见,不对之处还请赐教。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-09-08 09:40
onepc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:223
专家分:569
注 册:2009-8-27
收藏
得分:0 
             local @xx
            ; invoke RtlZeroMemory,addr @xx,Sizeof @xx
            ; mov @xx,'aaa'
             mov eax,uMsg
             ;;;;;;;;;;;;;
             .if eax==WM_LBUTTONDOWN

               invoke lstrcpy,addr @xx,offset szText
               invoke MessageBox,NULL,addr @xx,addr @xx,MB_OK
             .endif
呃我试下了还是要用到全局定义的字符串。。
不过看了东海一条鱼的可以用ctext直接给出。我试下
2009-09-08 09:47
sll0807
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:69
专家分:123
注 册:2009-3-2
收藏
得分:0 
可以直接使用db指令

    call    @f
    db        'This is a Test Str!',0
@@:
    pop    esi
    invoke    MessageBox,0,esi,0,0

------------------------------------------

    push    0
    push    0
    call    @f
    db        'This is a Test Str!',0
    @@:
    push    0
    call    MessageBox

[ 本帖最后由 sll0807 于 2009-10-29 16:01 编辑 ]
2009-10-29 16:00
快速回复:调用api messagebox的问题,请问是否一定要先定义?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017670 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved