- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
语音编程之SpeechSDK概述
语音编程之Speech SDK概述
if(hr == E_FAIL)
{
// 处理错误
}
else
{
// 处理成功
}
只有在该方法只返回E_FAIL 来指示失败时,上面的测试才能正常工作。然而,该方法还可能返回一个E_NOTIMPL或 E_INVALIDARG之类的错误值。上面的代码将会将它们解释为成功,这将可能导致程序的失败。
如果需要关于方法运行结果的更详细的信息,必须测试每一个相关的HRESULT值。但经常只关心方法是成功的还是失败的。一种可靠的测试HRESULT类型值说明成功还是失败的方法是利用如下的宏来判断,这些宏定义在Winerror.h中。
1)宏SUCCEEDED返回TRUE作为成功码,返回FALSE作为失败码;
2)宏FAILED返回TRUE作为失败码,返回FALSE作为成功码;
可以使用宏FAILED来修改上面的代码段:
// hr 是该方法返回的HRESULT类型值
if(FAILED(hr))
{
// 处理错误
}
else
{
// 处理成功
}
这段代码能合理地处理E_NOTIMPL和E_INVALIDARG之类的失败码。
大多数的COM方法返回结构化的HRESULT类型值,只有很少数量的方法使用HRESULT来返回简单的整数值,这类方法经常是成功的。如果将这类整数值传给宏SUCCESS,该宏将总是返回TRUE。常用的例子是IUnknown::Release方法,它减少一次对象的引用计数并返回当前的引用计数。将在管理对象的生命期一节中讨论引用计数的问题。
(4)指针地址
阅读一些COM方法的参考文档时,经常看到如下的说明:
HRESULT CreateDevice(
.
.
.
IDirect3DDevice8 **ppReturnedDeviceInterface
);
C或C++开发人员熟悉普通的指针,但是COM经常使用另外的间接层。这种间接的第二层用两个星号(**)跟着类型声明来表示。变量名一般使用“pp”作为前缀。在上面的例子中,参数ppReturnedDeviceInterface表示指向IDirect3DDevice8 接口的指针的地址。
与C++不同,不需要直接访问COM对象的方法,而必须获取指向方法的接口的指针。然后像调用指向C++方法的指针一样来调用方法。例如,使用如下的语法来调用方法IMyInterface::DoSomething method:
IMyInterface *pMyIface;
.
.
.
pMyIface-DoSomething(...);
这样做的原因是我们并不直接创建接口指针,而是必须调用不同的方法(例如上述的CreateDevice)来创建接口指针。为了使用这种方法来获取接口指针,应声明一个指向需要的接口的指针变量,并将该指针变量的地址,即一个指针的地址,传递给该方法。当该方法返回时,该变量将指向你要求的接口,可以使用该指针来调用接口的任何方法。将在使用COM接口一节中更详细地讨论接口指针的问题。
2.创建COM对象
有多种方法可以创建COM对象。以下是在编程中最常用的两种方法。
1)直接法: 将对象的CLSID传给CoCreateInstance函数。该函数将创建对象的一个实例,并返回指向你所指定接口的指针。
2)间接法: 调用一个特殊的方法或函数来创建对象。这类方法创建对象并返回该对象的接口。使用这种方式来创建对象时,通常并不能指定需要返回的接口。
创建对象之前,必须调用CoInitialize函数来初始化COM。如果使用间接法来创建对象,对象的创建方法将自动完成COM初始化。如果使用CoCreateInstance来创建对象,则必须明确地调用CoInitialize。 当完成了所有的COM工作后,必须调用CoUninitialize 来卸载COM。如果调用了CoInitialize,则必须对应地调用一次CoUninitialize。一般地说,需要明确,初始化COM的应用程序在其启动过程中初始化COM,在其清除过程中卸载COM。
用CoCreateInstance 来创建一个COM对象的实例需要使用该对象的CLSID。如果其CLSID是公开的,可以在其参考手册或相应的头文件中找到。如果其CLSID不是公开的,则不能使用直接法来创建该对象。
CoCreateInstance函数有5个参数,一般可以按如下方式来设置其参数。
1)rclsid:将该参数设为需要创建的对象的CLSID。
2)pUnkOuter:将该参数设为NULL。只有在聚合对象时才需要使用该参数。参见关于聚合的讨论。
3)dwClsContext:将该参数设为CLSCTX_INPROC_S
文档评论(0)