大智慧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
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。