| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2294 人关注过本帖
标题:问个很基础的问题,怎么定义unicode,是编译的时候messageboxex的地址编译成 ...
只看楼主 加入收藏
hcksfch
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-9-30
收藏
得分:0 
要不你们把代码复制过去自己试试,是不是我的编译器设置错了
2012-09-30 22:45
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:4 
你看到结果了吗 ?去掉了那个 编译运行的
图片附件: 游客没有浏览图片的权限,请 登录注册




梅尚程荀
马谭杨奚







                                                       
2012-10-01 00:44
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
程序代码:

.386
.model flat, stdcall
option casemap :none

include windows.inc
include user32.inc
include kernel32.inc
include masm32.inc

includelib user32.lib
includelib kernel32.lib
includelib masm32.lib
include macro.asm

__UNICODE__ equ 1

.data?
    buffer    db 100 dup(?)
   
.CODE
START:
   
    IFNDEF __UNICODE__
        int 3h
    ENDIF
    invoke StdOut,CTXT("Hello World!")

    ;暂停显示,回车键关闭
    invoke StdIn,addr buffer,sizeof buffer
    invoke ExitProcess,0
   
end START


上面的这个是可以的 你写一个类似的代码实验一下是不是编译器的问题 我没有新版的MASM32包没法试了
2012-10-01 10:53
hcksfch
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-9-30
收藏
得分:0 
回复 22楼 有容就大
看到了,此时调用的是messageboxexa;调用messageboxexw时应该显示乱码。
2012-10-02 00:15
hcksfch
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-9-30
收藏
得分:0 
回复 23楼 zklhp
程序代码:
        .386
        .model flat,stdcall
        option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include        windows.inc
include        user32.inc
includelib    user32.lib
include        kernel32.inc
includelib    kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
__UNICODE__ equ 1
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        .const
szCaption    db    '恭喜',0
szText        db    '当您看到这个信息的时候,您已经可以编译Win32汇编程序了!',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        .code
start:
                IFDEF __UNICODE__
        MessageBoxEx equ <MessageBoxExW>
        ENDIF
   
        invoke    MessageBoxEx,NULL,offset szText,offset szCaption,MB_OK,NULL
        invoke    ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        end    start
这个代码可以将messageboxex变为messageboxexw
似乎user32.inc里的条件汇编不能用

[ 本帖最后由 hcksfch 于 2012-10-2 00:54 编辑 ]
2012-10-02 00:44
hcksfch
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-9-30
收藏
得分:0 
以下是引用zklhp在2012-9-30 22:30:29的发言:

是不是必须把那个玩意放include之前啊

这个正确
2012-10-02 01:22
水哥
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:65
专家分:111
注 册:2012-8-11
收藏
得分:0 
;***********  多字节转宽字节  ********  
;   作用:将多字节字符串转为宽字节 pMText指向多字节串指针 pWText指向宽字节缓存指针
;**************************************   
 M2W proc        pMText:LPCSTR, pWText:LPWSTR
                      local   mLen:dword,wLen:dword
                      invoke  lstrlen,pMText
                     add      eax,1
                     shl        eax,1
                     mov     wLen,eax
                      invoke  MultiByteToWideChar,CP_ACP, 0, pMText, -1, NULL, 0
                      mov   mLen,eax
                      .if     wLen<eax
                          xor  eax,eax
                          ret
                      .endif
                     invoke  MultiByteToWideChar,CP_ACP, 0, pMText, -1, pWText,mLen
                     xor   eax,eax
                     inc   eax
       ret
 M2W endp
送你个俺写的多字节转宽字节的子过程,用UNICODE的API用的着
收到的鲜花
  • hcksfch2012-10-04 00:30 送鲜花  2朵   附言:好文章
2012-10-03 18:50
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
动态转 很好 可是这和调用ASCII版本的让系统自动转有啥区别呢 那还不如直接用ASCII的呢、、、
2012-10-03 18:58
水哥
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:65
专家分:111
注 册:2012-8-11
收藏
得分:0 
64位系统的好些东西都得用UNICOD的API 没办法,随用随转
2012-10-03 19:03
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
64位系统恐怕得考虑用新的编译器了。。
2012-10-03 19:07
快速回复:问个很基础的问题,怎么定义unicode,是编译的时候messageboxex的地址 ...
数据加载中...
 
   



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

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