- UID
- 1
- 精华
- 积分
- 76361
- 威望
- 点
- 宅币
- 个
- 贡献
- 次
- 宅之契约
- 份
- 最后登录
- 1970-1-1
- 在线时间
- 小时
|
其实和这个帖子差不多,就是说句话而已。
然而这是汇编的。这对于学习汇编的人有很大帮助哦。- ;导出符号
- global _start
- ;导入API
- extern __imp__CoInitialize@4
- extern __imp__CoCreateInstance@20
- extern __imp__MessageBoxA@16
- extern __imp__ExitProcess@4
- ;SpVoice的虚表
- struc ISpVoice_Vtbl
- ;IUnknown
- .QueryInterface resd 1
- .AddRef resd 1
- .Release resd 1
- ;ISpNotifySource
- .SetNotifySink resd 1
- .SetNotifyWindowMessage resd 1
- .SetNotifyCallbackFunction resd 1
- .SetNotifyCallbackInterface resd 1
- .SetNotifyWin32Event resd 1
- .WaitForNotifyEvent resd 1
- .GetNotifyEventHandle resd 1
- ;ISpEventSource
- .SetInterest resd 1
- .GetEvents resd 1
- .GetInfo resd 1
- ;ISpVoice
- .SetOutput resd 1
- .GetOutputObjectToken resd 1
- .GetOutputStream resd 1
- .Pause resd 1
- .Resume resd 1
- .SetVoice resd 1
- .GetVoice resd 1
- .Speak resd 1
- .SpeakStream resd 1
- .GetStatus resd 1
- .Skip resd 1
- .SetPriority resd 1
- .GetPriority resd 1
- .SetAlertBoundary resd 1
- .GetAlertBoundary resd 1
- .SetRate resd 1
- .GetRate resd 1
- .SetVolume resd 1
- .GetVolume resd 1
- .WaitUntilDone resd 1
- .SetSyncSpeakTimeout resd 1
- .GetSyncSpeakTimeout resd 1
- .SpeakCompleteEvent resd 1
- .IsUISupported resd 1
- .DisplayUI resd 1
- endstruc
- segment .text
- ;==============================================================================
- ;函数:_start
- ;描述:程序入口点
- ;------------------------------------------------------------------------------
- _start:
- ;//初始化COM
- ;if(FAILED(hr=CoInitialize(NULL)))
- ;{
- ; MessageBox(NULL,"初始化COM失败。",NULL,MB_OK);
- ; return 1;
- ;}
- push 0
- call [__imp__CoInitialize@4]
- cmp eax,0
- jge .initsuccess
- push 0
- push 0
- push szInitComFailed
- push 0
- call [__imp__MessageBoxA@16]
- jmp .Failed
- .initsuccess:
- ;ISpVoice*Voice;
- ;if(FAILED(hr=CoCreateInstance(CLSID_SpVoice,NULL,CLSCTX_INPROC_SERVER,IID_ISpVoice,(LPVOID*)&Voice)))
- ;{
- ; MessageBox(NULL,"创建ISpVoice对象失败。",NULL,MB_OK);
- ; return 1;
- ;}
- push _pSpVoice
- push _IID_ISpVoice
- push 1 ;CLSCTX_INPROC_SERVER
- push 0
- push _CLSID_SpVoice
- call [__imp__CoCreateInstance@20]
- cmp eax,0
- jge .createsuccess
- push 0
- push 0
- push szCreateObjFailed
- push 0
- call [__imp__MessageBoxA@16]
- jmp .Failed
- .createsuccess:
- ;Voice->Speak(TEXT("Hello World. 然而并没有什么卵用。"),SVSFDefault,NULL);
- push 0
- push SVSFDefault
- push szSpeak
- mov edx,[_pSpVoice]
- push edx
- mov eax,[edx]
- call[eax+ISpVoice_Vtbl.Speak]
- ;Voice->Release();
- mov edx,[_pSpVoice]
- push edx
- mov eax,[edx]
- call[eax+ISpVoice_Vtbl.Release]
- xor eax,eax
- push eax
- call[__imp__ExitProcess@4]
- .Failed:
- mov eax,1
- push eax
- call[__imp__ExitProcess@4]
- ;数据段
- segment .data
- _pSpVoice dd 0;ISpVoice*pSpVoice=NULL;
- _CLSID_SpVoice:
- dd 0x96749377
- dw 0x3391,0x11D2
- db 0x9E,0xE3,0x00,0xC0,0x4F,0x79,0x73,0x96
- _IID_ISpVoice:
- dd 0x6C44DF74
- dw 0x72B9,0x4992
- db 0xA1,0xEC,0xEF,0x99,0x6E,0x04,0x22,0xD4
- szInitComFailed db "初始化COM失败。",0
- szCreateObjFailed db "创建ISpVoice对象失败。",0
- szSpeak:;"Hello World. 然而并没有什么卵用。",0
- db 0x48,0x00,0x65,0x00,0x6c,0x00,0x6c,0x00,0x6f,0x00,0x20,0x00,0x57,0x00,0x6f,0x00
- db 0x72,0x00,0x6c,0x00,0x64,0x00,0x2e,0x00,0x20,0x00,0x36,0x71,0x0c,0x80,0x76,0x5e
- db 0xa1,0x6c,0x09,0x67,0xc0,0x4e,0x48,0x4e,0x75,0x53,0x28,0x75,0x02,0x30,0x00,0x00
- SPF_DEFAULT equ 0
- SPF_ASYNC equ (1<<0)
- SPF_PURGEBEFORESPEAK equ (1<<1)
- SPF_IS_FILENAME equ (1<<2)
- SPF_IS_XML equ (1<<3)
- SPF_IS_NOT_XML equ (1<<4)
- SPF_PERSIST_XML equ (1<<5)
- SPF_NLP_SPEAK_PUNC equ (1<<6)
- SPF_PARSE_SAPI equ (1<<7)
- SPF_PARSE_SSML equ (1<<8)
- SPF_PARSE_AUTODETECT equ 0
- SPF_NLP_MASK equ SPF_NLP_SPEAK_PUNC
- SPF_PARSE_MASK equ (SPF_PARSE_SAPI|SPF_PARSE_SSML)
- SPF_VOICE_MASK equ (((((((SPF_ASYNC|SPF_PURGEBEFORESPEAK)|SPF_IS_FILENAME)|SPF_IS_XML)|SPF_IS_NOT_XML)|SPF_NLP_MASK)|SPF_PERSIST_XML)|SPF_PARSE_MASK)
- SPF_UNUSED_FLAGS equ (~SPF_VOICE_MASK)
- SVSFDefault equ SPF_DEFAULT
- SVSFlagsAsync equ SPF_ASYNC
- SVSFPurgeBeforeSpeak equ SPF_PURGEBEFORESPEAK
- SVSFIsFilename equ SPF_IS_FILENAME
- SVSFIsXML equ SPF_IS_XML
- SVSFIsNotXML equ SPF_IS_NOT_XML
- SVSFPersistXML equ SPF_PERSIST_XML
- SVSFNLPSpeakPunc equ SPF_NLP_SPEAK_PUNC
- SVSFParseSapi equ SPF_PARSE_SAPI
- SVSFParseSsml equ SPF_PARSE_SSML
- SVSFParseAutodetect equ SPF_PARSE_AUTODETECT
- SVSFNLPMask equ SPF_NLP_MASK
- SVSFParseMask equ SPF_PARSE_MASK
- SVSFVoiceMask equ SPF_VOICE_MASK
- SVSFUnusedFlags equ SPF_UNUSED_FLAGS
复制代码
编译命令:- nasm -f win32 COM_SpVoice.asm -o COM_SpVoice.obj
- @pause
- link /ENTRY:start /MACHINE:X86 /NOLOGO /OUT:COM_SpVoice.exe /RELEASE /SUBSYSTEM:WINDOWS /VERSION:1.0 COM_SpVoice.obj kernel32.lib user32.lib ole32.lib
- @pause
复制代码
BIN:
COM_SpVoice.exe
(3 KB, 下载次数: 6)
SRC:
spvoice.7z
(412.43 KB, 下载次数: 6)
|
|