| 站点地图 | 联系我
| www.asm32.net | 2006版 | 资料中心 | linux | asm/asm32 | C/C++ | VC++ | java | 书签 | ASP.Net书签 | 上善若水 厚德载物
 现在位置 :: 主页 >> 资料中心 >> ROOT / CODE / ASM/ASM32 / Win32汇编编程 /
 

小技巧:直接用汇编调用COM:用SpVoice朗读一个字符串

来源(AoGo汇编小站)

From: http://www.aogosoft.com/

小技巧:直接用汇编调用COM:用SpVoice朗读一个字符串,内详 by sunbinjin

可以直接编译过,可以听到声音,其实COM在汇编中这样使用最简单,而这个偏移可以算出来的,或者直接在VC里找出来,起码比声明要方便些,汇编中声明太麻烦了

以下例子中没有Release,如果使用请注意

关于定义WCHAR的字符串真要命,不知是否有好的方法?

.586
.model flat,stdcall
option casemap:none

   include windows.inc
   include kernel32.inc
   include ole32.inc

   includelib kernel32.lib
   includelib ole32.lib

.data
CLSID_SpVoice GUID <096749377h, 03391h, 011D2h, <09Eh, 0E3h, 000h, 0C0h, 04Fh, 079h, 073h, 096h>>
IID_ISpVoice  GUID <06C44DF74h, 072B9h, 04992h, <0A1h, 0ECh, 0EFh, 099h, 06Eh, 004h, 022h, 0D4h>>

TEXT    db 'I',0,' ',0 ,'L',0 ,'o',0 ,'v',0 ,'e',0 ,' ',0 ,'Y',0 ,'o',0 ,'u',0 ,'!',0,0

.data?
PCOM    dd ?
.code

; ---------------------------------------------------------------------------

start:
    invoke CoInitialize,0
    invoke CoCreateInstance,offset CLSID_SpVoice, 0, CLSCTX_INPROC_SERVER, offset IID_ISpVoice,offset PCOM
    .if eax == 0
        push 0
        push 0
        push offset TEXT
        mov eax,PCOM
        push eax
        mov eax,[eax]
        call DWORD PTR[eax+50h] ;PCOM->Speak(L"I LOVE YOU!", 0, 0);
    .endif
    invoke ExitProcess,eax

end start

Link: http://www.asm32.net/article_details.aspx?id=4382


浏览次数 205 发布时间 2008/12/29 17:18:55 从属分类 Win32汇编编程 【评论】【 】【打印】【关闭
 
| www.asm32.net | 2006版 | 资料中心 | linux | asm/asm32 | C/C++ | VC++ | java | 书签 | ASP.Net书签 | 京ICP备09029108号-1