首页
社区
课程
招聘
[下载]发一个FASM支持中文UNICODE字符串定义的宏
发表于: 2010-10-23 21:07 5611

[下载]发一个FASM支持中文UNICODE字符串定义的宏

2010-10-23 21:07
5611
FASM不支持中文UNICODE字符串的定义,定义资源字符串时,只能用字母,用汉字的话,对话框出来就是乱码。

研究了下MultiByteToWideChar函数,了解ANSI与UNICODE的转换原理。写了个可直接定义中文UNICODE字符串的宏。

希望能对喜爱FASM的朋友有些帮助。

    本宏有两部分组成,一个是码表文件UTF16,另一个是UTF16.INC的头文件。

    UTF16.INC的头文件内容如下:

   

macro du [arg]
{
    local current,char
    if arg eqtype ''
        virtual at 0
            db arg
            count = $
        end virtual
        current = 0
        while current < count
            virtual at 0
                db arg
                load char byte from current
                wide=char 
                virtual at 0
                    file 'utf16':char*2,2
                    load char word from 0
                end virtual
            current = current+1
            if char <> 0
                wide = char
                if current < count
                    load char byte from current
                    wide=(wide+char)*2
                    virtual at 0
                        file 'utf16':wide,2
                        load wide word from 0
                    end virtual

                else
                    wide = 0
                end if
                current = current + 1
            end if
            end virtual
            dw wide
        end while
    else
        dw arg
    end if
}

struc du [args]

common label . word
du args
.size=$-.


用法:

szString    du    '这个UNICODE中文字符定义的宏',0

定义了一个为szString的UNICODE中文字符串,szString.size为这个字符串的BYTE长度(包括结尾的0);

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 888
活跃值: (2375)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
怎么用?我两个文件放INCLUDE\ENCODING目录下了,现在报错


; example of simplified Windows programming using complex macro features

include 'win32wx.inc' ; you can simply switch between win32ax, win32wx, win64ax and win64wx here
include 'ENCODING/utf16.inc' ;

;szString    du    '您好!我是示例程序。', 0
szString1    du    '这个UNICODE中文字符定义的宏',0

.code

  start:
        invoke  MessageBox,HWND_DESKTOP,invoke GetCommandLine,szString1,MB_OK+MB_ICONQUESTION
        invoke  ExitProcess,0

.end start




上传的附件:
2018-6-9 17:25
0
游客
登录 | 注册 方可回帖
返回
//