#include #include #include #include #include #include map instanceData; typedef struct tagTICKDATA { float tradePrice; float bidPrice; float askPrice; SYSTEMTIME systemTime; bool isTrade; }TICKDATA; FileMap fileMap; void createTickData(Block &tickData); extern "C" { __declspec(dllexport) bool PASCAL GetTicks(char *pTickers,SYSTEMTIME *pStartDate,SYSTEMTIME *pEndDate,char *pHandle); } bool APIENTRY DllMain(HANDLE hModule,DWORD reason,LPVOID lpReserved) { switch(reason) { case DLL_PROCESS_ATTACH: break; case DLL_THREAD_ATTACH: instanceData[(int)::GetCurrentThreadId]=int((int*)new FileMap()); // MessageBox(0,"DLLTEST","DLL_THREAD_ATTACH",MB_OK); break; case DLL_THREAD_DETACH: // ::delete (FileMap*)instanceData[(int)::GetCurrentThreadId]; // MessageBox(0,"DLLTEST","DLL_THREAD_DETACH",MB_OK); break; case DLL_PROCESS_DETACH: break; } return TRUE; } bool PASCAL GetTicks(char *pTickers,SYSTEMTIME *pStartDate,SYSTEMTIME *pEndDate,char *pDataHandle) { Block tickDataBlock; PureViewOfFile pureView; // DebugBreak(); FileMap *pFileMap=(FileMap*)instanceData[(int)::GetCurrentThreadId()]; if(!pFileMap){pFileMap=new FileMap();instanceData[(int)::GetCurrentThreadId()]=(int)pFileMap;} String str=String(pTickers)+String(" ")+SystemTime(*pStartDate).toString()+String(" ")+SystemTime(*pEndDate).toString(); // MessageBox(0,"GetTicks",str.str(),MB_OK); createTickData(tickDataBlock); ::sprintf(pDataHandle,"%08lx%08lx",(int)GetCurrentProcessId(),(int)GetCurrentThreadId()); if(!pFileMap->create((char*)pDataHandle,0,tickDataBlock.size()*sizeof(TICKDATA),FileMap::ReadWrite,FileMap::Commit))return false; pureView.createView(*pFileMap); pureView.write((int)sizeof(TICKDATA)); pureView.write((int)tickDataBlock.size()); for(int index=0;index &tickDataBlock) { tickDataBlock.remove(); tickDataBlock.insert(&TICKDATA()); TICKDATA *pTickData=&tickDataBlock[tickDataBlock.size()-1]; pTickData->tradePrice=100; pTickData->bidPrice=0; pTickData->askPrice=0; pTickData->systemTime=SystemTime(2003,5,1).getSYSTEMTIME(); pTickData->isTrade=true; tickDataBlock.insert(&TICKDATA()); pTickData=&tickDataBlock[tickDataBlock.size()-1]; pTickData->tradePrice=0; pTickData->bidPrice=101.90; pTickData->askPrice=0; pTickData->systemTime=SystemTime(2003,5,1).getSYSTEMTIME(); pTickData->isTrade=false; }