Initial
This commit is contained in:
96
proto/dlltest.cpp
Normal file
96
proto/dlltest.cpp
Normal file
@@ -0,0 +1,96 @@
|
||||
#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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user