O'Reilly logo

Learning DCOM by Thuan L. Thai

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Common Responsibilities

The code that the ATL Object Wizard generates includes empty method implementations for our supported interface, IOcrProcessor. It is our responsibility to fill in the functionality for the generated, empty methods. Also, there are often times when we want to add a new interface to our COM object. We will show these common responsibilities in this section.

Implementing Interface Methods

Your IOcrProcessor interface specifies a method called OcrWholeImage, which we’ll now implement. A client will pass in a SAFEARRAY of unsigned characters in the first parameter of OcrWholeImage. This is a VARIANT that represents an image buffer passed into this function for OCR processing. Your job is to pull out this binary buffer from the SAFEARRAY and perform the OCR processing. You then will pass the OCR text back to the client via pOcrText, the second parameter of OcrWholeImage. The implementation of OcrWholeImage is shown here:

STDMETHODIMP
COcrProcessor::OcrWholeImage(VARIANT binaryImageArray, BSTR * pOcrText)
{
   CComBSTR bstrOcrText;
   // Make sure that the variant contains a SAFEARRAY of bytes
   if (binaryImageArray.vt == (VT_ARRAY|VT_UI1)) {
      SAFEARRAY *pArray = binaryImageArray.parray ;
      unsigned char *pRawData;
      HRESULT hr = SafeArrayAccessData(pArray, (void HUGEP**)&pRawData);
      unsigned long arraySize = pArray->rgsabound[0].cElements ;
      // Pull out the image buffer from the SAFEARRAY unsigned char *pImageData = new unsigned char[arraySize] ; memcpy(pImageData, pRawData, ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required