diff --git a/CPRobot.cpp b/CPRobot.cpp index fa52537..530ed9a 100644 --- a/CPRobot.cpp +++ b/CPRobot.cpp @@ -10,6 +10,42 @@ #endif +#define IDR_VCOPT 103 + +CVCOptModule _Module; + +BEGIN_OBJECT_MAP(ObjectMap) +END_OBJECT_MAP() + +LONG CVCOptModule::Unlock() +{ + AfxOleUnlockApp(); + return 0; +} + +LONG CVCOptModule::Lock() +{ + AfxOleLockApp(); + return 1; +} +LPCTSTR CVCOptModule::FindOneOf(LPCTSTR p1, LPCTSTR p2) +{ + while (*p1 != NULL) + { + LPCTSTR p = p2; + while (*p != NULL) + { + if (*p1 == *p) + return CharNext(p1); + p = CharNext(p); + } + p1++; + } + return NULL; +} + + + // CCPRobotApp BEGIN_MESSAGE_MAP(CCPRobotApp, CWinApp) @@ -32,11 +68,76 @@ CCPRobotApp theApp; // CCPRobotApp ÃʱâÈ­ +BOOL CCPRobotApp::InitATL() +{ + m_bATLInited = TRUE; + +#if _WIN32_WINNT >= 0x0400 + HRESULT hRes = CoInitializeEx(NULL, COINIT_MULTITHREADED); +#else + HRESULT hRes = CoInitialize(NULL); +#endif + + if (FAILED(hRes)) + { + m_bATLInited = FALSE; + return FALSE; + } + + _Module.Init(ObjectMap, AfxGetInstanceHandle()); + _Module.dwThreadID = GetCurrentThreadId(); + + LPTSTR lpCmdLine = GetCommandLine(); //this line necessary for _ATL_MIN_CRT + TCHAR szTokens[] = _T("-/"); + + BOOL bRun = TRUE; + LPCTSTR lpszToken = _Module.FindOneOf(lpCmdLine, szTokens); + while (lpszToken != NULL) + { + if (lstrcmpi(lpszToken, _T("UnregServer"))==0) + { + _Module.UpdateRegistryFromResource(IDR_VCOPT, FALSE); + _Module.UnregisterServer(TRUE); //TRUE means typelib is unreg'd + bRun = FALSE; + break; + } + if (lstrcmpi(lpszToken, _T("RegServer"))==0) + { + _Module.UpdateRegistryFromResource(IDR_VCOPT, TRUE); + _Module.RegisterServer(TRUE); + bRun = FALSE; + break; + } + lpszToken = _Module.FindOneOf(lpszToken, szTokens); + } + + if (!bRun) + { + m_bATLInited = FALSE; + _Module.Term(); + CoUninitialize(); + return FALSE; + } + + hRes = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER, + REGCLS_MULTIPLEUSE); + if (FAILED(hRes)) + { + m_bATLInited = FALSE; + CoUninitialize(); + return FALSE; + } + + return TRUE; +} BOOL CCPRobotApp::InitInstance() { CWinApp::InitInstance(); + if (!InitATL()) + return FALSE; + AfxEnableControlContainer(); // Ç¥ÁØ ÃʱâÈ­ diff --git a/CPRobot.h b/CPRobot.h index 5d64fb5..91dfeaa 100644 --- a/CPRobot.h +++ b/CPRobot.h @@ -8,6 +8,17 @@ #endif #include "resource.h" // ÁÖ ±âÈ£ÀÔ´Ï´Ù. +#include + + +class CVCOptModule : public CComModule +{ +public: + LONG Unlock(); + LONG Lock(); + LPCTSTR FindOneOf(LPCTSTR p1, LPCTSTR p2); + DWORD dwThreadID; +}; // CCPRobotApp: @@ -20,12 +31,16 @@ public: CCPRobotApp(); // ÀçÁ¤ÀÇÀÔ´Ï´Ù. - public: +public: virtual BOOL InitInstance(); // ±¸ÇöÀÔ´Ï´Ù. DECLARE_MESSAGE_MAP() + +private: + BOOL m_bATLInited; + BOOL InitATL(); }; extern CCPRobotApp theApp; \ No newline at end of file diff --git a/CPRobotDlg.cpp b/CPRobotDlg.cpp index 066645d..89bbb77 100644 Binary files a/CPRobotDlg.cpp and b/CPRobotDlg.cpp differ diff --git a/CPRobotDlg.h b/CPRobotDlg.h index a322b05..796dee7 100644 --- a/CPRobotDlg.h +++ b/CPRobotDlg.h @@ -58,14 +58,7 @@ private: CListBox m_ResultList; CDataMgr* m_pDataMgr; - ICpOptionCodePtr m_pOpCode; - ISysDibPtr m_pOpCurOnly; + std::vector m_OpCodeList; ISysDibPtr m_pOpJpBid; CEventHandler m_EventHandler; - - std::vector m_PutDataList; - //ISysDibPtr m_pOpMst; - - CTrader* m_pTrader; - std::vector m_HandlerList; }; diff --git a/EventHandler.h b/EventHandler.h index e3c8174..9e0dfad 100644 --- a/EventHandler.h +++ b/EventHandler.h @@ -13,7 +13,13 @@ public: }; -class CEventHandler : public IDispEventImpl<0, CEventHandler, &DIID__ISysDibEvents, &LIBID_CPSYSDIBLib, 1, 0> +class CEventHandler : public IDispEventImpl< + 0, + CEventHandler, + &DIID__ISysDibEvents, + &LIBID_CPSYSDIBLib, + 1, + 0> { public: void SetIEventHandler(IEventHandler* pIEventHandler); @@ -21,7 +27,7 @@ public: void __stdcall Received(); BEGIN_SINK_MAP(CEventHandler) - SINK_ENTRY_EX(0, DIID__ISysDibEvents, 1, Received) + SINK_ENTRY_EX(0, DIID__ISysDibEvents, 0x01, Received) END_SINK_MAP() protected: