Files
Work/proto/junk/dlltest.cpp
2024-08-07 09:24:33 -04:00

97 lines
2.9 KiB
C++

#include <common/windows.hpp>
#include <common/block.hpp>
#include <common/systime.hpp>
#include <common/filemap.hpp>
#include <common/pview.hpp>
#include <sgi_stl/map.h>
map<int,int> instanceData;
typedef struct tagTICKDATA
{
float tradePrice;
float bidPrice;
float askPrice;
SYSTEMTIME systemTime;
bool isTrade;
}TICKDATA;
FileMap fileMap;
void createTickData(Block<TICKDATA> &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<TICKDATA> 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.size();index++)
{
TICKDATA &tickData=tickDataBlock[index];
pureView.write(tickData.tradePrice);
pureView.write(tickData.bidPrice);
pureView.write(tickData.askPrice);
pureView.write((unsigned char*)&tickData.systemTime,sizeof(tickData.systemTime));
pureView.write(tickData.isTrade);
}
pureView.destroyView();
return true;
}
void createTickData(Block<TICKDATA> &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;
}