Skip to content

Commit

Permalink
COMの使用方法について誤りと思われる箇所を修正
Browse files Browse the repository at this point in the history
余分な初期化を削除+未初期化スレッドからのCOMオブジェクト利用を解消
  • Loading branch information
xtne6f authored and abt8WG committed Jul 18, 2013
1 parent b3d3afb commit b966302
Show file tree
Hide file tree
Showing 10 changed files with 62 additions and 72 deletions.
7 changes: 0 additions & 7 deletions Common/SendCtrlCmd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,8 @@
#include "CtrlCmdDef.h"
#include "ErrDef.h"

#include <Objbase.h>
#pragma comment(lib, "Ole32.lib")

CSendCtrlCmd::CSendCtrlCmd(void)
{
CoInitialize(NULL);

WSAData wsaData;
WSAStartup(MAKEWORD(2,0), &wsaData);

Expand All @@ -44,8 +39,6 @@ CSendCtrlCmd::~CSendCtrlCmd(void)
this->lockEvent = NULL;
}
WSACleanup();

CoUninitialize();
}

BOOL CSendCtrlCmd::Lock(LPCWSTR log, DWORD timeOut)
Expand Down
4 changes: 0 additions & 4 deletions Common/WinHTTPUtil.cpp
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
#include "StdAfx.h"
#include "WinHTTPUtil.h"
#include <process.h>
#include <Objbase.h>

CWinHTTPUtil::CWinHTTPUtil(void)
{
CoInitialize(NULL);
this->session = NULL;
this->connect = NULL;
this->request = NULL;
Expand Down Expand Up @@ -44,8 +42,6 @@ CWinHTTPUtil::~CWinHTTPUtil(void)
CloseHandle(this->responseCompEvent);
this->responseCompEvent = NULL;
}

CoUninitialize();
}

void CWinHTTPUtil::ClearUpList()
Expand Down
47 changes: 24 additions & 23 deletions EpgTimerSrv/EpgTimerSrv/EpgDBManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,6 @@ CEpgDBManager::CEpgDBManager(void)
textPath += L"\\ConvertText.txt";

this->chgText.ParseReserveText(textPath.c_str() );

::CoInitialize( NULL );
HRESULT hr=regExp.CreateInstance(CLSID_RegExp);
if(FAILED(hr)){
regExp = NULL;
}
}

CEpgDBManager::~CEpgDBManager(void)
Expand All @@ -47,12 +41,6 @@ CEpgDBManager::~CEpgDBManager(void)
CloseHandle(this->lockEvent);
this->lockEvent = NULL;
}

if( regExp != NULL ){
regExp.Release();
}

::CoUninitialize();
}

BOOL CEpgDBManager::Lock(LPCWSTR log, DWORD timeOut)
Expand Down Expand Up @@ -407,9 +395,14 @@ BOOL CEpgDBManager::SearchEpg(vector<EPGDB_SEARCH_KEY_INFO>* key, vector<EPGDB_E
BOOL ret = TRUE;

map<ULONGLONG, SEARCH_RESULT_EVENT> resultMap;
for( size_t i=0; i<key->size(); i++ ){
SearchEvent( &(*key)[i], &resultMap );
CoInitialize(NULL);
{
IRegExpPtr regExp;
for( size_t i=0; i<key->size(); i++ ){
SearchEvent( &(*key)[i], &resultMap, regExp );
}
}
CoUninitialize();

map<ULONGLONG, SEARCH_RESULT_EVENT>::iterator itr;
for( itr = resultMap.begin(); itr != resultMap.end(); itr++ ){
Expand All @@ -431,7 +424,12 @@ BOOL CEpgDBManager::SearchEpg(EPGDB_SEARCH_KEY_INFO* key, vector<SEARCH_RESULT_E
BOOL ret = TRUE;

map<ULONGLONG, SEARCH_RESULT_EVENT> resultMap;
SearchEvent( key, &resultMap );
CoInitialize(NULL);
{
IRegExpPtr regExp;
SearchEvent( key, &resultMap, regExp );
}
CoUninitialize();

map<ULONGLONG, SEARCH_RESULT_EVENT>::iterator itr;
for( itr = resultMap.begin(); itr != resultMap.end(); itr++ ){
Expand All @@ -442,7 +440,7 @@ BOOL CEpgDBManager::SearchEpg(EPGDB_SEARCH_KEY_INFO* key, vector<SEARCH_RESULT_E
return ret;
}

void CEpgDBManager::SearchEvent(EPGDB_SEARCH_KEY_INFO* key, map<ULONGLONG, SEARCH_RESULT_EVENT>* resultMap)
void CEpgDBManager::SearchEvent(EPGDB_SEARCH_KEY_INFO* key, map<ULONGLONG, SEARCH_RESULT_EVENT>* resultMap, IRegExpPtr& regExp)
{
if( key == NULL || resultMap == NULL ){
return ;
Expand Down Expand Up @@ -686,7 +684,7 @@ void CEpgDBManager::SearchEvent(EPGDB_SEARCH_KEY_INFO* key, map<ULONGLONG, SEARC

//キーワード確認
if( notKeyList.size() != 0 ){
if( IsFindKeyword(key->regExpFlag, key->titleOnlyFlag, &notKeyList, itrEvent->second->shortInfo, itrEvent->second->extInfo, FALSE) == TRUE ){
if( IsFindKeyword(key->regExpFlag, regExp, key->titleOnlyFlag, &notKeyList, itrEvent->second->shortInfo, itrEvent->second->extInfo, FALSE) == TRUE ){
//notキーワード見つかったので対象外
continue;
}
Expand Down Expand Up @@ -716,7 +714,7 @@ void CEpgDBManager::SearchEvent(EPGDB_SEARCH_KEY_INFO* key, map<ULONGLONG, SEARC
continue;
}
}else{
if( IsFindKeyword(key->regExpFlag, key->titleOnlyFlag, &andKeyList, itrEvent->second->shortInfo, itrEvent->second->extInfo, TRUE, &matchKey) == FALSE ){
if( IsFindKeyword(key->regExpFlag, regExp, key->titleOnlyFlag, &andKeyList, itrEvent->second->shortInfo, itrEvent->second->extInfo, TRUE, &matchKey) == FALSE ){
//andキーワード見つからなかったので対象外
continue;
}
Expand Down Expand Up @@ -793,7 +791,7 @@ BOOL CEpgDBManager::IsInDateTime(vector<TIME_SEARCH>* timeList, SYSTEMTIME start
return FALSE;
}

BOOL CEpgDBManager::IsFindKeyword(BOOL regExpFlag, BOOL titleOnlyFlag, vector<wstring>* keyList, EPGDB_SHORT_EVENT_INFO* shortInfo, EPGDB_EXTENDED_EVENT_INFO* extInfo, BOOL andMode, wstring* findKey)
BOOL CEpgDBManager::IsFindKeyword(BOOL regExpFlag, IRegExpPtr& regExp, BOOL titleOnlyFlag, vector<wstring>* keyList, EPGDB_SHORT_EVENT_INFO* shortInfo, EPGDB_EXTENDED_EVENT_INFO* extInfo, BOOL andMode, wstring* findKey)
{
if( shortInfo == NULL ){
//基本情報ないので対象外
Expand All @@ -811,15 +809,18 @@ BOOL CEpgDBManager::IsFindKeyword(BOOL regExpFlag, BOOL titleOnlyFlag, vector<ws

if( regExpFlag == TRUE ){
//正規表現モード
if( this->regExp != NULL && word.size() > 0 && keyList->size() > 0 ){
if( regExp == NULL ){
regExp.CreateInstance(CLSID_RegExp);
}
if( regExp != NULL && word.size() > 0 && keyList->size() > 0 ){
try{
_bstr_t target( word.c_str() );
_bstr_t pattern( (*keyList)[0].c_str() );

this->regExp->PutGlobal( VARIANT_TRUE );
this->regExp->PutPattern( pattern );
regExp->PutGlobal( VARIANT_TRUE );
regExp->PutPattern( pattern );

IMatchCollectionPtr pMatchCol( this->regExp->Execute( target ) );
IMatchCollectionPtr pMatchCol( regExp->Execute( target ) );

if( pMatchCol->Count > 0 ){
if( findKey != NULL ){
Expand Down
6 changes: 2 additions & 4 deletions EpgTimerSrv/EpgTimerSrv/EpgDBManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,6 @@ class CEpgDBManager
}TIME_SEARCH;

map<LONGLONG, EPGDB_SERVICE_DATA*> epgMap;

IRegExpPtr regExp;
protected:
//PublicAPI”r‘¼§Œä—p
BOOL Lock(LPCWSTR log = NULL, DWORD timeOut = 60*1000);
Expand All @@ -102,10 +100,10 @@ class CEpgDBManager

BOOL _IsLoadingData();

void SearchEvent(EPGDB_SEARCH_KEY_INFO* key, map<ULONGLONG, SEARCH_RESULT_EVENT>* resultMap);
void SearchEvent(EPGDB_SEARCH_KEY_INFO* key, map<ULONGLONG, SEARCH_RESULT_EVENT>* resultMap, IRegExpPtr& regExp);
BOOL IsEqualContent(vector<EPGDB_CONTENT_DATA>* searchKey, vector<EPGDB_CONTENT_DATA>* eventData);
BOOL IsInDateTime(vector<TIME_SEARCH>* timeList, SYSTEMTIME startTime);
BOOL IsFindKeyword(BOOL regExpFlag, BOOL titleOnlyFlag, vector<wstring>* keyList, EPGDB_SHORT_EVENT_INFO* shortInfo, EPGDB_EXTENDED_EVENT_INFO* extInfo, BOOL andMode, wstring* findKey = NULL);
static BOOL IsFindKeyword(BOOL regExpFlag, IRegExpPtr& regExp, BOOL titleOnlyFlag, vector<wstring>* keyList, EPGDB_SHORT_EVENT_INFO* shortInfo, EPGDB_EXTENDED_EVENT_INFO* extInfo, BOOL andMode, wstring* findKey = NULL);
BOOL IsFindLikeKeyword(BOOL titleOnlyFlag, vector<wstring>* keyList, EPGDB_SHORT_EVENT_INFO* shortInfo, EPGDB_EXTENDED_EVENT_INFO* extInfo, BOOL andMode, wstring* findKey = NULL);

};
Expand Down
20 changes: 15 additions & 5 deletions EpgTimerSrv/EpgTimerSrv/EpgTimerSrv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

HANDLE g_hMutex;
SERVICE_STATUS_HANDLE g_hStatusHandle;
CEpgTimerSrvMain g_cMain;
CEpgTimerSrvMain* g_pMain;
DWORD g_dwCurrentSSState = SERVICE_STOPPED;

int APIENTRY _tWinMain(HINSTANCE hInstance,
Expand Down Expand Up @@ -123,8 +123,8 @@ DWORD WINAPI service_ctrl(DWORD dwControl, DWORD dwEventType, LPVOID lpEventData
OutputDebugString(_T("SERVICE_CONTROL_POWEREVENT"));
if ( dwEventType == PBT_APMQUERYSUSPEND ){
OutputDebugString(_T("PBT_APMQUERYSUSPEND"));
if( g_cMain.IsSuspending() == FALSE ){
if( g_cMain.ChkSuspend() == FALSE ){
if( g_pMain != NULL && g_pMain->IsSuspending() == FALSE ){
if( g_pMain->ChkSuspend() == FALSE ){
OutputDebugString(_T("BROADCAST_QUERY_DENY"));
return BROADCAST_QUERY_DENY;
}
Expand Down Expand Up @@ -160,10 +160,20 @@ BOOL SendStatusScm(int iState, int iExitcode, int iProgress)

void StartMain(BOOL bService)
{
g_cMain.StartMain(bService);
//メインスレッドに対するCOMの初期化
CoInitialize(NULL);

g_pMain = new CEpgTimerSrvMain;
g_pMain->StartMain(bService);
delete g_pMain;
g_pMain = NULL;

CoUninitialize();
}

void StopMain()
{
g_cMain.StopMain();
if( g_pMain != NULL ){
g_pMain->StopMain();
}
}
38 changes: 20 additions & 18 deletions EpgTimerSrv/EpgTimerSrv/RecInfoDBManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,6 @@
CRecInfoDBManager::CRecInfoDBManager(void)
{
this->lockEvent = _CreateEvent(FALSE, TRUE, NULL);
::CoInitialize( NULL );
HRESULT hr=regExp.CreateInstance(CLSID_RegExp);
if(FAILED(hr)){
regExp = NULL;
}
}


Expand All @@ -24,12 +19,6 @@ CRecInfoDBManager::~CRecInfoDBManager(void)
CloseHandle(this->lockEvent);
this->lockEvent = NULL;
}

if( regExp != NULL ){
regExp.Release();
}

::CoUninitialize();
}

BOOL CRecInfoDBManager::Lock(LPCWSTR log, DWORD timeOut)
Expand Down Expand Up @@ -133,11 +122,14 @@ void CRecInfoDBManager::CreateKeyMap()
GetPrivateProfileString(L"SET", L"RecInfo2RegExp", L"", buff, 1024, iniAppPath.c_str());
wstring strReg = buff;

CoInitialize(NULL);
{
IRegExpPtr regExp;
for( size_t i=0 ;i<this->recInfoList.size(); i++ ){
wstring title = L"";
if( this->recInfoList[i]->shortInfo != NULL ){
title = this->recInfoList[i]->shortInfo->event_name;
ReplaceRegExp(title, strReg, L"");
ReplaceRegExp(title, strReg, L"", regExp);
}
map<wstring, RECINFO_LIST_ITEM*>::iterator itrTitle;
RECINFO_LIST_ITEM* itemTitle = NULL;
Expand All @@ -150,6 +142,8 @@ void CRecInfoDBManager::CreateKeyMap()
}
itemTitle->infoList.push_back(this->recInfoList[i]);
}
}
CoUninitialize();
}

void CRecInfoDBManager::SaveRecInfo()
Expand Down Expand Up @@ -253,7 +247,12 @@ BOOL CRecInfoDBManager::IsFindTitleInfo(EPGDB_EVENT_INFO* info, WORD chkDay)
wstring title = L"";
if( info->shortInfo != NULL ){
title = info->shortInfo->event_name;
ReplaceRegExp(title, strReg, L"");
CoInitialize(NULL);
{
IRegExpPtr regExp;
ReplaceRegExp(title, strReg, L"", regExp);
}
CoUninitialize();
}
__int64 weekSec = chkDay*24*60*60;
weekSec *= I64_1SEC;
Expand Down Expand Up @@ -281,18 +280,21 @@ BOOL CRecInfoDBManager::IsFindTitleInfo(EPGDB_EVENT_INFO* info, WORD chkDay)
return ret;
}

void CRecInfoDBManager::ReplaceRegExp(wstring &strBuff, wstring strReg, wstring strNew)
void CRecInfoDBManager::ReplaceRegExp(wstring &strBuff, wstring strReg, wstring strNew, IRegExpPtr& regExp)
{
if( this->regExp != NULL && strBuff.size() > 0 && strReg.size() > 0 ){
if( regExp == NULL ){
regExp.CreateInstance(CLSID_RegExp);
}
if( regExp != NULL && strBuff.size() > 0 && strReg.size() > 0 ){
try{
_bstr_t target( strBuff.c_str() );
_bstr_t pattern( strReg.c_str() );
_bstr_t replace( strNew.c_str() );

this->regExp->PutGlobal( VARIANT_TRUE );
this->regExp->PutPattern( pattern );
regExp->PutGlobal( VARIANT_TRUE );
regExp->PutPattern( pattern );

strBuff = (wstring)this->regExp->Replace( target, replace );
strBuff = (wstring)regExp->Replace( target, replace );
}catch(...){
strBuff = L"";
}
Expand Down
4 changes: 1 addition & 3 deletions EpgTimerSrv/EpgTimerSrv/RecInfoDBManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ class CRecInfoDBManager
void AddInfo(EPGDB_EVENT_INFO* info);

BOOL IsFindTitleInfo(EPGDB_EVENT_INFO* info, WORD chkDay);
void ReplaceRegExp(wstring &strBuff, wstring strReg, wstring strNew);
protected:
typedef struct _RECINFO_LIST_ITEM{
vector<EPGDB_EVENT_INFO*> infoList;
Expand All @@ -29,14 +28,13 @@ class CRecInfoDBManager

vector<EPGDB_EVENT_INFO*> recInfoList;
map<wstring, RECINFO_LIST_ITEM*> titleMap;

IRegExpPtr regExp;
protected:
//PublicAPI”r‘¼§Œä—p
BOOL Lock(LPCWSTR log = NULL, DWORD timeOut = 60*1000);
void UnLock(LPCWSTR log = NULL);

void Clear();
void CreateKeyMap();
static void ReplaceRegExp(wstring &strBuff, wstring strReg, wstring strNew, IRegExpPtr& regExp);
};

2 changes: 0 additions & 2 deletions UPnPCtrl/NICUtil.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,6 @@ SORT_LIST_HANDLE MP_NIC_GetNICInfo(void)
ULONG len = 0;
WSADATA data;
PIP_ADAPTER_ADDRESSES adpts = NULL;
CoInitialize(NULL);
DWORD res = 0;
int i=0;

Expand Down Expand Up @@ -179,7 +178,6 @@ SORT_LIST_HANDLE MP_NIC_GetNICInfo(void)
free(adpts);
}
WSACleanup();
CoUninitialize();

#elif defined(__APPLE__)
struct ifaddrs *ifa_list = NULL;
Expand Down
2 changes: 0 additions & 2 deletions UPnPCtrl/UpnpSsdpUtil.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,6 @@ UPNP_SERVER_HANDLE UPNP_SERVER_CreateHandle(

item->notifyDeviceList = SORT_LIST_CreateHandle(0, SORT_LIST_COMPDEF_strcmp, NULL, UPNP_SSDP_NOTIFY_DEVICE_INFO_Delete);
#ifdef _WIN32
CoInitialize(NULL);
ZeroMemory(&wsaData, sizeof(wsaData));
WSAStartup(MAKEWORD(2, 2), &wsaData);
#endif
Expand Down Expand Up @@ -277,7 +276,6 @@ void UPNP_SERVER_CloseHandle(

#ifdef _WIN32
WSACleanup();
CoUninitialize();
#endif
free(item);
}
Expand Down
4 changes: 0 additions & 4 deletions twitter/twitter/WinHTTPUtil.cpp
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
#include "StdAfx.h"
#include "WinHTTPUtil.h"
#include <process.h>
#include <Objbase.h>

CWinHTTPUtil::CWinHTTPUtil(void)
{
CoInitialize(NULL);
this->session = NULL;
this->connect = NULL;
this->request = NULL;
Expand Down Expand Up @@ -47,8 +45,6 @@ CWinHTTPUtil::~CWinHTTPUtil(void)
CloseHandle(this->responseCompEvent);
this->responseCompEvent = NULL;
}

CoUninitialize();
}

void CWinHTTPUtil::ClearUpList()
Expand Down

0 comments on commit b966302

Please sign in to comment.