打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【大智慧】大智慧dll导出数据是binary格式,请问如何修改源码改为txt格式,可以为matlab调用?
大智慧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
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
大智慧公式dll加密之我见:VC6.0 如何编写大智慧飞狐等股票dll函数举例
飞狐扩展公式实例
飞狐编程:实时警告写入TXT文件
【大智慧】大智慧入池股票数DLL源代码
Java和Eclipse中加载本地库(.dll文件)
dumpbin的用法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服