大智慧dll导出数据是binary格式源码以下: // FxjFunc.cpp : Defines the entry point for the DLL application. // #include "stdafx.h" #include "FxjFunc.h" #include <string> using namespace std; #include <fstream> #include<sstream> BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } string DzhCode(string dm , const BOOL bIndex) { string mydm=dm; if(bIndex && mydm.sBUStr(0,3)=="000") { mydm="1";mydm=mydm.append(dm); return mydm; } else { return mydm; } } string int2Code(int iCode) { char strvar[20]; itoa(iCode,strvar,10);//指标序号,第三个参数10表示十进制 string mydm(strvar); if(iCode>1000000)//沪市指数1000001... { return mydm; } else { //char s[20]; //sprintf(s,"00000%d",iCode); //return string(s); string zeros=""; for(int j=strlen(strvar);j<6;j++) zeros.append("0"); mydm=zeros.append(mydm); return mydm; } } string DzhDataType(DATA_TYPE datatype) { switch(datatype) { case TICK_DATA: //分笔成交 return "TICK"; break; case MIN1_DATA: //1分钟线 return "MIN1"; break; case MIN5_DATA: //5分钟线 return "MIN5"; break; case MIN15_DATA: //15分钟线 return "MIN15"; break; case MIN30_DATA: //30分钟线 return "MIN30"; break; case MIN60_DATA: //60分钟线 return "MIN60"; break; case DAY_DATA: //日线 return "DAY"; break; case WEEK_DATA: //周线 return "WEEK"; break; case MONTH_DATA: //月线 return "MONTH"; break; case MULTI_DATA: //多日线 return "NDAYS"; break; case 12: return "YEAR"; break; case 13: return "QUARTER"; break; case 14: return "SEMIYEAR"; break; case 15: return "15"; break; case 1: return "1"; break; default: return "NA"; } } string fileName(string dm , const BOOL bIndex,int varid,DATA_TYPE datatype) { char strvar[20]; itoa(varid,strvar,10);//指标序号,第三个参数10表示十进制 string filename ="FMLDATA\\"; filename.append(DzhCode(dm,bIndex)); filename.append("."); filename.append(strvar); filename.append("."); filename.append(DzhDataType(datatype)); return filename; } __declspec(dllexport) int WINAPI WRITE(CALCINFO* pData) { float f ; int nVar,nFirst,i; string code=""; if(pData->m_pfParam1 && pData->m_pfParam2 && //参数1,2有效 pData->m_nParam1Start>=0 && //参数1为序列数 pData->m_pfParam3==NULL) //有2个参数 { nFirst = pData->m_nParam1Start; //有效值 code.append(pData->m_strStkLabel); f = *pData->m_pfParam2; nVar = (int)f; if(nVar>0) { struct recordStruct{int dt;float value;} record; string filename=fileName(code,pData->m_bIndex,nVar,pData->m_dataType); ofstream fout(filename.c_str(),ios::binary); if(fout) { for(i=0;i<pData->m_nNumData;i++) { record.dt=pData->m_pData.m_time; record.value=pData->m_pfParam1; fout.write((char*)(&record),sizeof(record)); pData->m_pResultBuf=pData->m_pfParam1; } } fout.close(); return 1; } } return -1; } __declspec(dllexport) int WINAPI READ(CALCINFO* pData) { float f; int nCode,nVar,i; string code=""; if(pData->m_pfParam1 && pData->m_pfParam2 && //参数有效 pData->m_nParam1Start<0 && //参数为常数 pData->m_pfParam3==NULL) //2个参数 { nCode=(int) *pData->m_pfParam1; //参数1 if(nCode==0) code.append(pData->m_strStkLabel); else code=int2Code(nCode); f = *pData->m_pfParam2; nVar = (int)f; //参数1 if(nVar>0) { struct recordStruct{int dt;float value;} record; string filename=fileName(code,pData->m_bIndex,nVar,pData->m_dataType); ifstream fin(filename.c_str(),ios::binary); if(fin) { record.dt=0;record.value=0; fin.read((char*)(&record),sizeof(record)); for(i=0;i<pData->m_nNumData;i++) { int dzhrq = pData->m_pData.m_time; while(!fin.eof() && dzhrq>record.dt ) { fin.read((char*)(&record),sizeof(record)); } if(!fin.eof() && dzhrq==record.dt) //if(!fin.eof()) { pData->m_pResultBuf=record.value; } if(fin.eof()) break; } } fin.close(); return 1; } } return -1; } 我已将write to txt修改以下,请问如何修改read txt to strucy: __declspec(dllexport) int WINAPI WRITE(CALCINFO* pData) { float f ; int nVar,nFirst,i; string code=""; if(pData->m_pfParam1 && pData->m_pfParam2 && //参数1,2有效 pData->m_nParam1Start>=0 && //参数1为序列数 pData->m_pfParam3==NULL) //有2个参数 { nFirst = pData->m_nParam1Start; //有效值 code.append(pData->m_strStkLabel); f = *pData->m_pfParam2; nVar = (int)f; if(nVar>0) { string filename=fileName(code,pData->m_bIndex,nVar,pData->m_dataType); ofstream out(filename.c_str()); if(out) { for(i=0;i<pData->m_nNumData;i++) { struct recordStruct{int dt;float value;} record; record.dt=pData->m_pData.m_time; record.value=pData->m_pfParam1; pData->m_pResultBuf=pData->m_pfParam1; out<<record.dt<<" "<<record.value<<endl; } } return 1; } } return -1; } 谢谢股票论坛 www.55188.com |
|