直接用汇编调用COM:用SpVoice朗读一个字符串,内详

本文介绍了一个使用汇编语言通过COM接口实现语音输出的例子。该例程利用SpVoice组件并调用其Speak方法播放指定文本。文章提供了完整的源代码,并说明了如何在VC环境中编译运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原帖http://www.aogosoft.com/downpage.asp?mode=viewsmtext&id=149

可以直接编译过,可以听到声音,其实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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值