Chinese Simplified (简体中文)

可连接对象的处理

ABBYY FineReader Engine 中的有些对象是所谓的“可连接对象”。这意味着它们可实现IConnectionPointContainer 接口。可连接对象支持 ABBYY FineReader Engine 及其客户端通信。

重要事项! 作为进程外服务器加载的 Engine对象不支持回调。

ABBYY FineReader Engine 的可连接对象及其对应回调接口列表如下:

对象 回调接口 (Dispinterface)
FRDocument IFRDocumentEvents
FRPages IFRPagesEvents
FRPage IFRPageEvents
ImageDocument IImageDocumentEvents

如要在ABBYY FineReader Engine 客户端应用程序中接收 ABBYY FineReader Engine 特定事件的通知,则应该实现特定类型的接口,并通过"advise" 方法将实现这些接口的对象与相应的可连接对象连接。有两种全局方法可用于通知源的连接和切断:

HRESULT AdviseFREngineObject( IUnknown* object, IUnknown* callback, DWORD* cookie );
    HRESULT UnAdviseFREngineObject( IUnknown* object, DWORD cookie );
    

这些方法应该接收一个可连接对象,将其作为 object 参数,其相应的回调接口作为callback 参数。

您需要实现必要的接口,并通过"advise" 方法将实现这些接口的对象与相应的可连接对象连接。我们将以 FRDocument 对象为例。

  1. 实现IFRDocumentEvents 接口。因为该接口源自 IUnknown 接口,客户端对象应该也使用 IUnknown 方法:
class CFRDocumentCallback: public IFRDocumentEvents {
public:
...
    // 提供 IUnknown 方法简单实现
    ULONG STDMETHODCALLTYPE AddRef() { return 1; }
    ULONG STDMETHODCALLTYPE Release() { return 1; }
    HRESULT STDMETHODCALLTYPE QueryInterface( REFIID riid, void** ppObject )
    {
        if( ppObject == 0 ) {
            return E_POINTER;
        }
    *ppObject = 0;
    if( riid == IID_IUnknown || riid == IID_IFRDocumentEvents )
    {
        *ppObject = this;
        AddRef();
        return S_OK;
    } else {
        return E_NOINTERFACE;
    }
}
// 提供 IFRDocumentEvents 方法实现
HRESULT STDMETHODCALLTYPE OnProgress(
IFRDocument* sender,int percentage, VARIANT_BOOL* cancel );
HRESULT STDMETHODCALLTYPE OnWarning(
IFRDocument* sender,int index, BSTR tip, VARIANT_BOOL* cancel );
HRESULT STDMETHODCALLTYPE OnPageProcessed(
    IFRDocument* sender, int index, PageProcessingStageEnum stage ) { return S_OK; }
};
    
  1. 然后 CFRDocumentCallback 类别可用来接收来自 FRDocument 对象的通知。将该对象与通知源连接(忽略错误处理):
// 假设我们已收到 FRDocument 对象
IFRDocument* document;
// 创建回调对象
CFRDocumentCallback callbackObject;
// 将侦听器与通知源连接
DWORD cookie; // Advise 方法将返回一个存储 cookie 变量
AdviseFREngineObject( frDocument, &callbackObject, &cookie );
// 处理文档
...
// 通知后,侦听器将不再被需要,应该断开其连接
UnadviseFREngineObject( frDocument, cookie );
    
  

12.12.2022 20:26:04

Usage of Cookies. In order to optimize the website functionality and improve your online experience ABBYY uses cookies. You agree to the usage of cookies when you continue using this site. Further details can be found in our Privacy Notice.