提一个有关语音朗读的问题?(com调用问题)

zhaoyao73 2001-08-08 06:55:47
// Machine generated IDispatch wrapper class(es) created with ClassWizard
/////////////////////////////////////////////////////////////////////////////
// IVTxtAuto wrapper class

class IVTxtAuto : public COleDispatchDriver
{
public:
IVTxtAuto() {} // Calls COleDispatchDriver default constructor
IVTxtAuto(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
IVTxtAuto(const IVTxtAuto& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}

// Attributes
public:

// Operations
public:
void Register(LPCTSTR pszSite, LPCTSTR pszApp);
void Speak(LPCTSTR pszBuffer, long dwFlags);
void StopSpeaking();
void AudioPause();
void AudioResume();
void AudioRewind();
void AudioFastForward();
void SetCallback(LPCTSTR lpszNewValue);
void SetSpeed(long nNewValue);
long GetSpeed();
void SetEnabled(long nNewValue);
long GetEnabled();
BOOL GetIsSpeaking();
};
// Machine generated IDispatch wrapper class(es) created with ClassWizard

#include "stdafx.h"
#include "vtxtauto.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif



/////////////////////////////////////////////////////////////////////////////
// IVTxtAuto properties

/////////////////////////////////////////////////////////////////////////////
// IVTxtAuto operations

void IVTxtAuto::Register(LPCTSTR pszSite, LPCTSTR pszApp)
{
static BYTE parms[] =
VTS_BSTR VTS_BSTR;
InvokeHelper(0x60020000, DISPATCH_METHOD, VT_EMPTY, NULL, parms,
pszSite, pszApp);
}

void IVTxtAuto::Speak(LPCTSTR pszBuffer, long dwFlags)
{
static BYTE parms[] =
VTS_BSTR VTS_I4;
InvokeHelper(0x60020001, DISPATCH_METHOD, VT_EMPTY, NULL, parms,
pszBuffer, dwFlags);
}

void IVTxtAuto::StopSpeaking()
{
InvokeHelper(0x60020002, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
}

void IVTxtAuto::AudioPause()
{
InvokeHelper(0x60020003, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
}

void IVTxtAuto::AudioResume()
{
InvokeHelper(0x60020004, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
}

void IVTxtAuto::AudioRewind()
{
InvokeHelper(0x60020005, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
}

void IVTxtAuto::AudioFastForward()
{
InvokeHelper(0x60020006, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
}

void IVTxtAuto::SetCallback(LPCTSTR lpszNewValue)
{
static BYTE parms[] =
VTS_BSTR;
InvokeHelper(0x60020007, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms,
lpszNewValue);
}

void IVTxtAuto::SetSpeed(long nNewValue)
{
static BYTE parms[] =
VTS_I4;
InvokeHelper(0x60020008, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms,
nNewValue);
}

long IVTxtAuto::GetSpeed()
{
long result;
InvokeHelper(0x60020008, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
return result;
}

void IVTxtAuto::SetEnabled(long nNewValue)
{
static BYTE parms[] =
VTS_I4;
InvokeHelper(0x6002000a, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms,
nNewValue);
}

long IVTxtAuto::GetEnabled()
{
long result;
InvokeHelper(0x6002000a, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
return result;
}

BOOL IVTxtAuto::GetIsSpeaking()
{
BOOL result;
InvokeHelper(0x6002000c, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
return result;
}

==================================

以下为我的调用:
if (CoInitialize(NULL)==S_OK)
{
const GUID IID_IVTxtAuto = {0xFF2C7A50, 0x78F9, 0x11CE,{ 0xB7, 0x62, 0x00, 0xAA, 0x00, 0x4C, 0xD6, 0x5C} };
const GUID CLSID_VTxtAuto = {0xFF2C7A52, 0x78F9, 0x11CE,{ 0xB7, 0x62, 0x00, 0xAA, 0x00, 0x4C, 0xD6, 0x5C} };
GUID CLSIDOFSPEECH;
CLSIDFromProgID(L"Speech.VoiceText.1",&CLSIDOFSPEECH);
HRESULT hr = CoCreateInstance(CLSIDOFSPEECH,NULL,
CLSCTX_LOCAL_SERVER,IID_IVTxtAuto,(LPVOID*)&pIVTxtAuto);
if (SUCCEEDED(hr))
{
this->bSoundOk=TRUE;
pIVTxtAuto->Register("","English Text");
pIVTxtAuto->SetEnabled(1);
pIVTxtAuto->SetSpeed(150);
pIVTxtAuto->Speak("Wait a little,I will read the ",128);
((CButton *)(GetDlgItem(IDC_SPEAK)))->EnableWindow(TRUE);
((CButton *)(GetDlgItem(IDC_SPEAK)))->SetCheck(1);
}
else
{
CoUninitialize();
this->bSoundOk=FALSE;
((CButton *)(GetDlgItem(IDC_SPEAK)))->SetCheck(0);
((CButton *)(GetDlgItem(IDC_SPEAK)))->EnableWindow(FALSE);
MessageBox("本机没有安装TTS引擎,因此无法朗诵!","警告:",MB_OK+MB_ICONEXCLAMATION );
}
}

每当调用 pIVTxtAuto->Register("","English Text");时总是出现异常,在运行时,程序错误,无法继续执行,

请问什么毛病?

另外,我用pIVTxtAuto->Release();为什么编译器说接口IVTxtAuto 没有此成员函数?
...全文
113 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaoyao73 2001-08-09
  • 打赏
  • 举报
回复
oh,where is the com expert?
zhaoyao73 2001-08-09
  • 打赏
  • 举报
回复
who can teach me?
zhaoyao73 2001-08-09
  • 打赏
  • 举报
回复
从VC生成的类来看,明明是LPCTSTR吗?怎么是BSTR呢?
昨天就不知出了什么鬼,突然好使了,当我clean所有文件后,重新编译后,又不好使了,
AlphaOne 2001-08-08
  • 打赏
  • 举报
回复
我用的是OLE Viewer生成的类,可以Speak
AlphaOne 2001-08-08
  • 打赏
  • 举报
回复
应当用_bstr_t(LPCTSTR)
AlphaOne 2001-08-08
  • 打赏
  • 举报
回复
pIVTxtAuto->Register("","English Text");
你看看要求的参数类型,
不是 LPCTSTR 吧?
这里不能用 LPCTSTR 传递参数,会出错。
zhaoyao73 2001-08-08
  • 打赏
  • 举报
回复
请不要被上面的代码吓倒,是VC自动生成的从类型库。怎么没人回答?
某鸟 2001-08-08
  • 打赏
  • 举报
回复
gz!

我也遇到过!没解决!

gz!
zhaoyao73 2001-08-08
  • 打赏
  • 举报
回复
谁能帮助我!

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧