亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? inner.cpp

?? 《DCOM入門》隨書源碼 Chapter 1 (Distributed Computing) N/A Chapter 2 (DCOM Overview) N/A Chapter 3 (Objec
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//*******************************************************************
//*******************************************************************
//***  Implementation of the CoOcrEngine component object
//***  that supports aggregation
//*******************************************************************
//*******************************************************************

//-------------------------------------------------------------------
// Required macros
//-------------------------------------------------------------------
#define UNICODE         // UNICODE
#define _WIN32_DCOM     // DCOM

//-------------------------------------------------------------------
// includes
//-------------------------------------------------------------------
#include <assert.h>
#include <stdio.h>
#include <windows.h>
#include <initguid.h>
#include "..\..\idl\ocr.h"

//-------------------------------------------------------------------
// global event telling use wen to shutdown our application
//-------------------------------------------------------------------
HANDLE g_hExitEvent;
wchar_t g_wszModuleName[MAX_PATH];

// Number of living objects
LONG g_lComponentRefCounts = 0; // counts living objects and locks

//-------------------------------------------------------------------
// Component Level Reference count for the lifetime managment of 
// the whole component.
// These specific implementations are used for in-process servers
// There are a pair of functions like these that are used for
// out-of-process servers.
// Return values for debugging purpose only 
//-------------------------------------------------------------------
inline ULONG ComponentAddRef()
{
   return (InterlockedIncrement(&g_lComponentRefCounts));
}

inline ULONG ComponentRelease()  
{
   return (InterlockedDecrement(&g_lComponentRefCounts));
}

//*******************************************************************
//*******************************************************************
//***  UTILITY FUNCTIONS
//*******************************************************************
//*******************************************************************
void DisplayStatus(wchar_t *pwszMsg, HRESULT hr)
{

   if (hr == S_OK) {
      wprintf(TEXT("%s\n"), pwszMsg);
      return;
   }

   if (HRESULT_FACILITY(hr) == FACILITY_WINDOWS) {
      hr = HRESULT_CODE(hr);
   }

   wchar_t *pwszStatus;
   FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
       FORMAT_MESSAGE_FROM_SYSTEM,
       NULL,
       hr,
       MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
       (LPWSTR)&pwszStatus,
       0,
       NULL );

   wprintf(TEXT("%s: %s (ECode: %lx)\n"), pwszMsg, pwszStatus, hr);

   LocalFree(pwszStatus);
}

//-------------------------------------------------------------------
// Given a unicode string, get the number of bytes needed to host it
//-------------------------------------------------------------------
inline long ByteLen(wchar_t *pwsz) 
{
   return (sizeof(wchar_t)*(wcslen(pwsz)+1));
}

//-------------------------------------------------------------------
// Automatic registration; for in-process server, do:
//    regsvr32.exe xxx.dll
//-------------------------------------------------------------------
void RegisterServerToSystem()
{
   wchar_t wszKey[MAX_PATH];
   wchar_t wszValue[MAX_PATH];
   HKEY hKey = 0;

   // CLSID_OcrEngine = {DF22A6B2-A58A-11d1-ABCC-00207810D5FE}
   // HKEY_CLASSES_ROOT\CLSID\{DF22A6B2-A58A-11d1-ABCC-00207810D5FE}
   //      @="OcrEngine"
   wcscpy(wszKey, TEXT("CLSID\\{DF22A6B2-A58A-11d1-ABCC-00207810D5FE}"));
   RegCreateKey(HKEY_CLASSES_ROOT, wszKey, &hKey);
   wcscpy(wszValue, TEXT("OcrEngine"));
   RegSetValueEx(hKey, 0, 0, REG_SZ, (BYTE*)wszValue, ByteLen(wszValue));
   RegCloseKey(hKey);

   // HKEY_CLASSES_ROOT\CLSID\{DF22A6B2-A58A-11d1-ABCC-00207810D5FE}\InprocServer32
   //      @="E:\DCOM\CODE\Essentials\inproc\DEBUG\inproc.dll"
   //      "ThreadingModel" = "Both"
   wcscpy(wszKey, TEXT("CLSID\\{DF22A6B2-A58A-11d1-ABCC-00207810D5FE}")
        TEXT("\\InprocServer32"));
   RegCreateKey(HKEY_CLASSES_ROOT, wszKey, &hKey);
   wcscpy(wszValue, g_wszModuleName);
   RegSetValueEx(hKey, 0, 0, REG_SZ, (BYTE*)wszValue, ByteLen(wszValue));
   wcscpy(wszValue, TEXT("Both"));
   RegSetValueEx(hKey, TEXT("ThreadingModel"), 0, REG_SZ, 
                 (BYTE*)wszValue, ByteLen(wszValue));
   RegCloseKey(hKey);
}

//-------------------------------------------------------------------
// Automatic registration; for in-process server, do:
//    regsvr32.exe -u xxx.dll
//-------------------------------------------------------------------
void UnregisterServerFromSystem()
{
   long lRc = 0 ;

   lRc=RegDeleteKey(HKEY_CLASSES_ROOT, 
       TEXT("CLSID\\{DF22A6B2-A58A-11d1-ABCC-00207810D5FE}") 
     TEXT("\\InprocServer32"));
   DisplayStatus(TEXT("Unregistered CLSID's InprocServer"), lRc);

   lRc=RegDeleteKey(HKEY_CLASSES_ROOT, 
       TEXT("CLSID\\{DF22A6B2-A58A-11d1-ABCC-00207810D5FE}"));
   DisplayStatus(TEXT("Unregistered CLSID"), lRc);
}
 

//*******************************************************************
//*******************************************************************
//***  Implitcit unknown
//*******************************************************************
//*******************************************************************
template<class T> class CImplicitUnknown : public IUnknown {
public:
    // m_pbkptr points to the object implementing the
   // non-delegating IUnknown methods.
   void Bkptr(T *p) { m_pbkptr=p; }

    STDMETHODIMP QueryInterface(REFIID iid, void **ppv)
    { return m_pbkptr->InternalQueryInterface(iid, ppv); }
    STDMETHODIMP_(ULONG) AddRef(void)
    { return m_pbkptr->InternalAddRef(); }
    STDMETHODIMP_(ULONG) Release(void)
    { return m_pbkptr->InternalAddRef(); }
    
private:
    T *m_pbkptr;
};

//*******************************************************************
//*******************************************************************
//***  Class CoOcrEngine - A component object that implements two
//***  interfaces:  IOcr and ISpell
//***  This implementation that supports AGGREGATION.
//***  Containment works with every component object.
//***  Aggregation doesn't work across aparments, including 
//***  processes and machines.  This means that the object
//***  that wants to aggregate this object must run in the same
//***  apartment as this object.  This implies that no marshaling
//***  will be involved, and both the aggregator and the aggregatee
//***  (this object) will run in the same appartment, since we're
//***  in the same process, this also implies the same thread.
//*******************************************************************
//*******************************************************************
class CoOcrEngine : public IOcr, public ISpell {
public:
   //----------------------------------
   // Modified for aggregation support
   //----------------------------------
   CoOcrEngine(IUnknown *pOuterUnk) 
        : m_lRefCount(0), m_pOuterUnk(pOuterUnk), m_InnerUnk()
   { 
      ComponentAddRef(); 

      m_InnerUnk.Bkptr(this);
      if (pOuterUnk==NULL) { 
         // we're not aggregating; therefore, 
         // we've got no outer object
         // the outer object is ourselves
         m_pOuterUnk = &m_InnerUnk;
         DisplayStatus(TEXT("AGGRVersion: not being aggregated"), S_OK);
      } else {
         DisplayStatus(TEXT("AGGRVersion: being aggregated"), S_OK);
      }
   }

   ~CoOcrEngine()
   { ComponentRelease(); }

   //----------------------------------
   // Modified for aggregation support
   //----------------------------------
   static HRESULT CreateObject(LPUNKNOWN pOuterUnk, 
                             REFIID riid, void **ppv);

public: 
   //----------------------------------
   // Modified for aggregation support
   //----------------------------------
   // IUnknown Methods - possibly delegating to an out aggregator
   // these a method for this object's IUnknown's vtbl,
   // but the functionality depends on the m_pOuterUnk pointer.
   STDMETHODIMP QueryInterface(REFIID iid, void **ppv) 
   { return m_pOuterUnk->QueryInterface(iid, ppv); }
   STDMETHODIMP_(ULONG) AddRef(void)
   { return m_pOuterUnk->AddRef(); }
   STDMETHODIMP_(ULONG) Release(void)
   { return m_pOuterUnk->Release(); }

   // IOcr Methods
   STDMETHODIMP OcrImage(long lImageSize, 
                         byte *pbImage,                          
                         wchar_t **pwszOcrText);
   STDMETHODIMP OcrZone(long lImageSize, 
                        byte *pbImage,
                        Zone zone,
                        wchar_t **pwszOcrText);

   // ISpell Methods
   STDMETHODIMP Check(wchar_t *pwszWord,
                      PossibleWords *pWords);

private:
   //----------------------------------
   // Aggregation support
   //----------------------------------
   // non-delegating/inner/implicit unknown 
   // these are non-virtual private functions
   HRESULT InternalQueryInterface(REFIID iid, void **ppv);
   ULONG InternalAddRef(void)
   {
      wchar_t wszMsg[MAX_PATH];
      wsprintf(wszMsg, TEXT("CoOcrEngine::InternalAddRef (%ld)"), m_lRefCount); 
      return InterlockedIncrement(&m_lRefCount);
   }

   ULONG InternalRelease(void)
   {
      wchar_t wszMsg[MAX_PATH];
      wsprintf(wszMsg, TEXT("CoOcrEngine::InternalRelease (%ld)"), m_lRefCount-1); 
      long lCount = InterlockedDecrement(&m_lRefCount);
      if (lCount == 0) { delete this; } 
      return lCount; 
   }

private:
   LONG m_lRefCount;

   //----------------------------------
   // Aggregation support
   //----------------------------------
   IUnknown *m_pOuterUnk;
   friend CImplicitUnknown<CoOcrEngine>;
   CImplicitUnknown<CoOcrEngine> m_InnerUnk;
};

//-------------------------------------------------------------------
// CoOcrEngine::CreateObject - static function to create an
// CoOcrEngine object
//-------------------------------------------------------------------
HRESULT CoOcrEngine::CreateObject(LPUNKNOWN pOuterUnk, 
                                  REFIID riid, 
                                  void** ppv)
{
   // debug message to check this thread id 
   // and the client's thread id, uncomment to see the effect
   // Aggregation work only when the thread ids are equal

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
香蕉乱码成人久久天堂爱免费| 成人av电影观看| 欧美午夜宅男影院| 亚洲女与黑人做爰| 99热99精品| 中文字幕在线不卡一区| 18成人在线观看| 天堂成人国产精品一区| 91久久国产最好的精华液| **网站欧美大片在线观看| 欧美一区二区三区视频免费播放| 精品播放一区二区| 精品一区二区av| 国产日韩欧美在线一区| www.av精品| 国产精品国产成人国产三级| 国产精品综合一区二区| 国产人久久人人人人爽| 大白屁股一区二区视频| 开心九九激情九九欧美日韩精美视频电影 | 日韩激情一二三区| 4438x亚洲最大成人网| 老司机一区二区| 中文字幕第一区二区| 在线免费亚洲电影| 久久99精品久久久久婷婷| 国产欧美日本一区视频| 一本大道av一区二区在线播放| 亚洲国产色一区| 精品va天堂亚洲国产| 色婷婷香蕉在线一区二区| 久久精品99国产国产精| 国产精品视频免费看| 3d动漫精品啪啪1区2区免费| 国产精品正在播放| 日韩成人一级大片| 中文字幕一区二区三区在线播放| 欧美伊人久久久久久午夜久久久久| 日本sm残虐另类| 亚洲视频一二三| 久久久久久久久久久99999| 欧美日韩国产一区二区三区地区| 国产中文一区二区三区| 亚洲va欧美va人人爽| 久久这里只有精品视频网| 国产不卡一区视频| 日韩精品色哟哟| 一级精品视频在线观看宜春院| 欧美变态凌虐bdsm| 丁香婷婷综合五月| 精品少妇一区二区三区在线播放| 懂色av一区二区三区免费看| 国产在线播放一区| 久久精品国产色蜜蜜麻豆| 日本中文在线一区| 人人超碰91尤物精品国产| 午夜不卡在线视频| 日韩av一级片| 国产精品乡下勾搭老头1| 国产主播一区二区| 99久久伊人网影院| 在线观看91视频| 欧美精品在线视频| 精品欧美一区二区久久| 久久久久国色av免费看影院| 久久精品在这里| 综合久久国产九一剧情麻豆| 亚洲一区二区3| 日韩不卡免费视频| 国产精品911| 欧美中文字幕不卡| 欧美mv和日韩mv国产网站| 五月婷婷欧美视频| 精品亚洲成a人在线观看| 波多野结衣亚洲| 91精品蜜臀在线一区尤物| 国产精品视频yy9299一区| 亚洲综合在线第一页| 国模套图日韩精品一区二区| 91蜜桃网址入口| 久久夜色精品国产欧美乱极品| 亚洲你懂的在线视频| 激情五月婷婷综合网| 色网站国产精品| 国产亚洲精久久久久久| 日本伊人色综合网| 精品视频在线免费观看| 国产婷婷色一区二区三区四区| 一区二区三区四区精品在线视频 | 99视频在线精品| 欧美精品一区二区三区一线天视频 | 国产福利一区二区三区视频在线| 欧美色图第一页| 亚洲婷婷在线视频| 成人性生交大片免费看视频在线| 欧美一区二区三区视频免费 | 激情欧美一区二区| 久久99精品国产麻豆婷婷| 国产做a爰片久久毛片| 欧美裸体一区二区三区| 一卡二卡三卡日韩欧美| 色88888久久久久久影院按摩| 石原莉奈在线亚洲二区| 91碰在线视频| 亚洲一级电影视频| 欧美色窝79yyyycom| 日本中文一区二区三区| 欧美精品一区二区三区在线播放 | 国产欧美一区二区三区鸳鸯浴| 国产综合久久久久影院| 中文字幕国产一区| 91免费国产在线| 亚洲一区二区高清| 日韩一区二区不卡| 国产成人午夜精品5599| 亚洲国产精品成人综合色在线婷婷 | 日韩一区二区三| 国产99久久久国产精品免费看| 国产欧美中文在线| 一本大道久久a久久精二百| 五月综合激情日本mⅴ| 久久婷婷成人综合色| 色网综合在线观看| 久久99精品久久久久久国产越南| 亚洲婷婷国产精品电影人久久| 欧美日本在线播放| fc2成人免费人成在线观看播放| 亚洲国产成人精品视频| 国产偷国产偷亚洲高清人白洁| 色婷婷激情久久| 国产精品18久久久久久vr| 一区二区三区国产精华| 欧美大片免费久久精品三p| 一本色道久久加勒比精品| 国产乱理伦片在线观看夜一区| 日韩精品亚洲一区| 亚洲午夜激情av| 亚洲精品视频在线看| 国产性天天综合网| 精品国产污污免费网站入口| 欧美精品久久一区二区三区| 色综合网站在线| www.在线欧美| 播五月开心婷婷综合| 欧美午夜一区二区三区| 日本高清无吗v一区| 97久久精品人人爽人人爽蜜臀| 成人精品视频一区二区三区尤物| 激情五月婷婷综合| 国产xxx精品视频大全| 国产精品91一区二区| 国产91在线看| 午夜久久电影网| 久久色.com| 久久久精品天堂| 国产精品免费丝袜| 亚洲色欲色欲www在线观看| 中文字幕一区二区三区在线不卡| 17c精品麻豆一区二区免费| 亚洲另类春色国产| 亚洲电影中文字幕在线观看| 三级在线观看一区二区| 久久电影网电视剧免费观看| 福利一区二区在线观看| 在线欧美日韩精品| 久久综合五月天婷婷伊人| 亚洲欧美一区二区视频| 亚洲一卡二卡三卡四卡五卡| 天使萌一区二区三区免费观看| 久久精品国产免费| 成人av网站免费观看| 欧美精品自拍偷拍动漫精品| 久久久久久久综合色一本| 亚洲色图视频网| 国产麻豆日韩欧美久久| 欧美性高清videossexo| 久久久精品中文字幕麻豆发布| 最好看的中文字幕久久| 精品在线播放免费| 欧美中文字幕一区二区三区亚洲| 亚洲一区二区三区四区在线| 日本不卡视频在线| 色老综合老女人久久久| 久久午夜色播影院免费高清| 亚洲午夜电影在线| 色综合久久久网| 国产精品久久久一本精品 | 尤物在线观看一区| 成人黄色av电影| 欧美激情一区二区三区全黄| 免费人成精品欧美精品| 精品视频一区 二区 三区| 中国av一区二区三区| 国产自产视频一区二区三区| 日韩欧美电影一区| 另类小说欧美激情| 日韩精品一区二区三区中文精品| 午夜精品久久久久久久蜜桃app| 色94色欧美sute亚洲线路一久 | 国产不卡视频在线播放|