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

来源:互联网 发布:淘宝四大营销工具 编辑:程序博客网 时间:2024/05/16 17:40

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

可以直接编译过,可以听到声音,其实COM在汇编中这样使用最简单,而这个偏移可以算出来的,或者直接在VC里找出来,起码比声明要方便些,汇编中声明太麻烦了以下例子中没有Release,如果使用请注意关于定义WCHAR的字符串真要命,不知是否有好的方法?

.586.model flat,stdcalloption casemap:none   include windows.inc   include kernel32.inc   include ole32.inc      includelib kernel32.lib   includelib ole32.lib.dataCLSID_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,eaxend start


0 0
原创粉丝点击