欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → stockfunc.dll 的问题

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有11413人关注过本帖树形打印复制链接

主题:stockfunc.dll 的问题

帅哥哟,离线,有人找我吗?
admin
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:7302 积分:32559 威望:1000 精华:45 注册:2003/12/30 16:34:32
  发帖心情 Post By:2011/10/31 17:22:57 [显示全部帖子]

先说明你遇到了什么问题?:

 回到顶部
帅哥哟,离线,有人找我吗?
admin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:7302 积分:32559 威望:1000 精华:45 注册:2003/12/30 16:34:32
  发帖心情 Post By:2011/11/1 9:19:17 [显示全部帖子]

那请将完整的公式测试代码,以及DLL中的C++代码提供一下,我们本地做一下测试


 回到顶部
帅哥哟,离线,有人找我吗?
admin
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:7302 积分:32559 威望:1000 精华:45 注册:2003/12/30 16:34:32
  发帖心情 Post By:2011/11/2 9:44:48 [显示全部帖子]

初步看了你的DLL代码,由于原理复杂很难理解其中的内容,但是初步分析来看应该与你的内部使用的数据行情有关,建议多在DLL内加日志输出,逐步排除到底是哪个位置原因,附上我们经常使用的调试输出日志的C++代码类:

 

#if !defined(AFX_LOGINFO_H__9EABF931_9C07_4EC9_9FF4_CA90E9F59C5D__INCLUDED_)
#define AFX_LOGINFO_H__9EABF931_9C07_4EC9_9FF4_CA90E9F59C5D__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <stdio.h>    // 文件相关操作的头文件
#include <tchar.h>    // TCHAR的头文件

//! UNICODE格式文件头的常量定义
const unsigned short int gc_uUnicodeFileHeader = 0xFEFF;

/**
*  @brief 记录日志类
*
*      使用本模块的“LOG_DEBUG_INFO”宏,即可生成即时日志。具体特性如下:
*  @n 1.) 在"Debug"编译模式下,或在"Release"编译模式下在工程设置中定义了"_LOG"选项,
*         产生日志文件;
*  @n 2.) 支持UNICODE编码的日志信息;
*  @n 3.) 支持UNICODE编码的文件格式;
*  @n 4.) 自动添加产生日志信息的细化到毫秒级别的当前时间信息;
*  @n 5.) 自动在日志信息后添加回车换行;
*  @n 6.) 用C/C++类库函数操作文件,提升代码的可移植性;
*  @n 7.) 支持可变参数的日志信息;
*  @n 8.) 返璞归真,恢复对TCHAR和SEH的使用。
*
*/
class CLogInfo
{
 //-----------------------------------------------------------------------
 //    公共的成员变量 :
 //-----------------------------------------------------------------------
 public:
  /**
  *  @brief 记录日志信息
  *
  *      本函数可生成即时日志。具体特性如下:
  *  @n 1.) 在"Debug"编译模式下,或在"Release"编译模式下在工程设置中定义了"_LOG"选项,
  *         产生日志文件;
  *  @n 2.) 支持UNICODE编码的日志信息;
  *  @n 3.) 支持UNICODE编码的文件格式;
  *  @n 4.) 自动添加产生日志信息的细化到毫秒级别的当前时间信息;
  *  @n 5.) 自动在日志信息后添加回车换行;
  *  @n 6.) 用C/C++类库函数操作文件,提升代码的可移植性;
  *  @n 7.) 支持可变参数的日志信息;
  *  @n 8.) 返璞归真,恢复对TCHAR和SEH的使用。
  *
  *  @param szLogFileName[]    日志文件名字符串
  *  @param szFormat[]         日志信息格式字符串
  *  @param ...                可变日志信息
  *  @return static void
  */
  static void LogInfo( const TCHAR szLogFileName[], const TCHAR szFormat[], ... )
  {
   //若文件大小超过500K,则转移文件
   CFileStatus status;
   if(CFile::GetStatus(szLogFileName,status))
   {
    if(status.m_size >= 500*1024)
    {
     CTime time = CTime::GetCurrentTime();
     CString strFileName = szLogFileName + time.Format("%Y-%m-%d %H#%M#%S.txt");
     ::CopyFile(szLogFileName, strFileName, FALSE);
     
     RemoveFiles(szLogFileName);
    }
   }
   
   // 待记录的日志信息
   TCHAR szLogInfo[1024];

   // 临时信息
   TCHAR szTemp[1024];

   // 当前本机时间的结构实例
   SYSTEMTIME stuSystemTime;

   // 日志文件指针
   FILE * pFile = NULL;

   try
   {
    // 获取当前的本机系统时间
    ::GetLocalTime( &stuSystemTime );

    // 按照传入的格式,格式化日志信息 :
    va_list ap;

    va_start( ap, szFormat );
    ::_vsntprintf( szTemp, 1024, szFormat, ap );
    va_end( ap );
    // 结束 ( 按照传入的格式,格式化日志信息 )

    // 在日志信息前添加当前时间信息,并在信息尾添加换行信息 :
    ::_stprintf( szLogInfo,
        _T( "%.4d-%.2d-%.2d %.2d:%.2d:%.2d.%.3d    %s\r\n" ),
        stuSystemTime.wYear,
        stuSystemTime.wMonth,
        stuSystemTime.wDay,
        stuSystemTime.wHour,
        stuSystemTime.wMinute,
        stuSystemTime.wSecond,
        stuSystemTime.wMilliseconds,
        szTemp );
    // 结束 ( 在日志信息前添加当前时间信息,并在信息尾添加换行信息 )
   }
   catch (...)
   {
    return;
   }

   // 打开日志信息文件
   pFile  = ::_tfopen( szLogFileName, _T( "a+b" ) );

   if ( pFile )
   {
    try
    {
     // 偏移到文件尾
     ::fseek( pFile, 0, SEEK_END );

     #ifdef _UNICODE

     // 文件大小
     long lFileSize = 0;

     // 获取文件大小
     lFileSize = ::ftell( pFile );

     // 若当前为UNICODE模式,且当前为新文件,则写入UNICODE格式文件头 :
     if( lFileSize == 0 )
     {
      ::fwrite( &gc_uUnicodeFileHeader,
          sizeof( unsigned short int ),
          1,
          pFile );
     }

     #endif
     // 结束 ( 若当前为UNICODE模式,且当前为新文件,则写入UNICODE格式文件头 )

     // 向文件写入日志信息数据
     ::fwrite( szLogInfo,
         ::_tcslen( szLogInfo ) * sizeof( TCHAR ),
         1,
         pFile );

     // 关闭文件 :
     ::fclose( pFile );
     // 结束 。
    }
    catch(...)
    {
    }
   }
  }

  static void LogInfo2( const TCHAR szLogFileName[], const TCHAR szFormat[], ... )
  {
   //若文件大小超过500K,则转移文件
   CFileStatus status;
   if(CFile::GetStatus(szLogFileName,status))
   {
    if(status.m_size >= 500*1024)
    {
     CTime time = CTime::GetCurrentTime();
     CString strFileName = szLogFileName + time.Format("%Y-%m-%d %H#%M#%S");
     ::CopyFile(szLogFileName, strFileName, FALSE);
     
     RemoveFiles(szLogFileName);
    }
   }
   
   // 待记录的日志信息
   TCHAR szLogInfo[1024];

   // 临时信息
   TCHAR szTemp[1024];

   // 当前本机时间的结构实例
   SYSTEMTIME stuSystemTime;

   // 日志文件指针
   FILE * pFile = NULL;

   try
   {
    // 获取当前的本机系统时间
    ::GetLocalTime( &stuSystemTime );

    // 按照传入的格式,格式化日志信息 :
    va_list ap;

    va_start( ap, szFormat );
    ::_vsntprintf( szTemp, 1024, szFormat, ap );
    va_end( ap );
    // 结束 ( 按照传入的格式,格式化日志信息 )

    // 在日志信息前添加当前时间信息,并在信息尾添加换行信息 :
    ::_stprintf( szLogInfo,
        _T( "%s\r\n" ),
        szTemp );
    // 结束 ( 在日志信息前添加当前时间信息,并在信息尾添加换行信息 )
   }
   catch (...)
   {
    return;
   }

   // 打开日志信息文件
   pFile  = ::_tfopen( szLogFileName, _T( "a+b" ) );

   if ( pFile )
   {
    try
    {
     // 偏移到文件尾
     ::fseek( pFile, 0, SEEK_END );

     #ifdef _UNICODE

     // 文件大小
     long lFileSize = 0;

     // 获取文件大小
     lFileSize = ::ftell( pFile );

     // 若当前为UNICODE模式,且当前为新文件,则写入UNICODE格式文件头 :
     if( lFileSize == 0 )
     {
      ::fwrite( &gc_uUnicodeFileHeader,
          sizeof( unsigned short int ),
          1,
          pFile );
     }

     #endif
     // 结束 ( 若当前为UNICODE模式,且当前为新文件,则写入UNICODE格式文件头 )

     // 向文件写入日志信息数据
     ::fwrite( szLogInfo,
         ::_tcslen( szLogInfo ) * sizeof( TCHAR ),
         1,
         pFile );

     // 关闭文件 :
     ::fclose( pFile );
     // 结束 。
    }
    catch(...)
    {
    }
   }
  }
};

#define LOG_DEBUG_INFO CLogInfo::LogInfo
#define LOG_DEBUG_INFO2 CLogInfo::LogInfo2

#endif // !defined(AFX_LOGINFO_H__9EABF931_9C07_4EC9_9FF4_CA90E9F59C5D__INCLUDED_)


 回到顶部