15,474
社区成员




#pragma once
Stdafx.cpp
#include "stdafx.h"
CTP.h
#pragma once
CTP.cpp
#include "StdAfx.h"
Util.h
#include "StdAfx.h"
#pragma once
#include "..\thosttraderapi\ThostFtdcLevel2UserApi.h"
#include "Struct.h"
#include "Delegates.h"
using namespace CTP;
namespace Native
{
/// 非托管类,自动释放字符串指针内存
class CAutoStrPtr
{
public:
char* m_pChar;
//int m_Length;
CAutoStrPtr(String^ str);
//CAutoStrPtr(String^ str, void* pDst, int length);
~CAutoStrPtr();
};
/// 非托管类, 自动转换 Managed <==> Native
// M: managed
// N: native
template<typename M, typename N>
class MNConv
{
public:
// 模版类的实现部分必须放在头文件里,否则链接会出错
/// Native to Managed
static M N2M(N* pNative){
return safe_cast<M>(Marshal::PtrToStructure(IntPtr(pNative), M::typeid));
};
// Managed to Native
static void M2N(M managed, N* pNative){
Marshal::StructureToPtr(managed, IntPtr(pNative), true);
};
};
/// 全局函数
ThostFtdcRspInfoField^ RspInfoField(CThostFtdcRspInfoField *pRspInfo);
};
Util.cpp
#include "StdAfx.h"
#include "Util.h"
#include <string.h>
#include <memory.h>
#include <stdlib.h>
using namespace System::Runtime::InteropServices;
namespace Native
{
CAutoStrPtr::CAutoStrPtr(String^ str)
{
if(str != nullptr)
{
m_pChar = (char*) Marshal::StringToHGlobalAnsi(str).ToPointer();
//m_Length = strlen(m_pChar);
}
else
m_pChar = nullptr;
}
CAutoStrPtr::~CAutoStrPtr()
{
if(m_pChar != nullptr)
Marshal::FreeHGlobal(IntPtr(m_pChar));
}
ThostFtdcRspInfoField^ RspInfoField(CThostFtdcRspInfoField *pRspInfo)
{
return safe_cast<ThostFtdcRspInfoField^>(Marshal::PtrToStructure(IntPtr(pRspInfo), ThostFtdcRspInfoField::typeid));
}
}
Struct.h
#pragma once
using namespace System;
using namespace System::Runtime::InteropServices;
namespace CTP
{
public enum struct EnumTeResumeType //THOST_TE_RESUME_TYPE
{
THOST_TERT_RESTART = 0,
THOST_TERT_RESUME,
THOST_TERT_QUICK
};
/////////////////////////////////////////////////////////////////////////
///TFtdcInstrumentStatusType是º?一°?个?合?约?交?易°¡Á状Á¡ä态¬?类¤¨¤型¨ª
/////////////////////////////////////////////////////////////////////////
public enum struct EnumInstrumentStatusType: Byte
{
/// <summary>
///开a盘¨¬前¡ã
/// </summary>
BeforeTrading = (Byte)'0',
/// <summary>
///非¤?交?易°¡Á
/// </summary>
NoTrading = (Byte)'1',
/// <summary>
///连¢?续?交?易°¡Á
/// </summary>
Continous = (Byte)'2',
/// <summary>
///集¡¥合?竞o价?报À¡§单Ì£¤
/// </summary>
AuctionOrdering = (Byte)'3',
/// <summary>
///集¡¥合?竞o价?价?格?平?衡a
/// </summary>
AuctionBalance = (Byte)'4',
/// <summary>
///集¡¥合?竞o价?撮䨦合?
/// </summary>
AuctionMatch = (Byte)'5',
/// <summary>
///收º?盘¨¬
/// </summary>
Closed = (Byte)'6'
};
…………………………………
}
Delegates.h
#pragma once
namespace CTP
{
// common deleagats
public delegate void FrontConnected();
public delegate void FrontDisconnected(int nReason);
public delegate void HeartBeatWarning(int nTimeLapse);
public delegate void RspUserLogin(ThostFtdcRspUserLoginField^ pRspUserLogin, ThostFtdcRspInfoField^ pRspInfo, int nRequestID, bool bIsLast);
public delegate void RspUserLogout(ThostFtdcUserLogoutField^ pUserLogout, ThostFtdcRspInfoField^ pRspInfo, int nRequestID, bool bIsLast);
public delegate void RspError(ThostFtdcRspInfoField^ pRspInfo, int nRequestID, bool bIsLast);
// marketdata
public delegate void RspSubLevel2MarketData(ThostFtdcSpecificSecurityField^ pSpecificSecurity, ThostFtdcRspInfoField^ pRspInfo, int nRequestID, bool bIsLast);
public delegate void RspUnSubLevel2MarketData(ThostFtdcSpecificSecurityField^ pSpecificSecurity, ThostFtdcRspInfoField^ pRspInfo, int nRequestID, bool bIsLast);
public delegate void RspSubNGTSIndex(ThostFtdcSpecificSecurityField^ pSpecificSecurity, ThostFtdcRspInfoField^ pRspInfo, int nRequestID, bool bIsLast);
public delegate void RspUnSubNGTSIndex(ThostFtdcSpecificSecurityField^ pSpecificSecurity, ThostFtdcRspInfoField^ pRspInfo, int nRequestID, bool bIsLast);
public delegate void RtnLevel2MarketData(ThostFtdcLevel2MarketDataField^ pLevel2MarketData);
public delegate void RtnNGTSIndex(ThostFtdcNGTSIndexField^ pNGTSIndex);
};
#ifdef __CTP_MA__
namespace Native
{
delegate void Internal_FrontConnected();
delegate void Internal_FrontDisconnected(int nReason);
delegate void Internal_HeartBeatWarning(int nTimeLapse);
delegate void Internal_RspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
delegate void Internal_RspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
delegate void Internal_RspUserLogout(CThostFtdcUserLogoutField *pUserLogout, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
delegate void Internal_RspSubLevel2MarketData(CThostFtdcSpecificSecurityField *pSpecificSecurity, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
delegate void Internal_RspUnSubLevel2MarketData(CThostFtdcSpecificSecurityField *pSpecificSecurity, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
delegate void Internal_RspSubNGTSIndex(CThostFtdcSpecificSecurityField *pSpecificSecurity, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
delegate void Internal_RspUnSubNGTSIndex(CThostFtdcSpecificSecurityField *pSpecificSecurity, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
delegate void Internal_RtnLevel2MarketData(CThostFtdcLevel2MarketDataField *pLevel2MarketData);
delegate void Internal_RtnNGTSIndex(CThostFtdcNGTSIndexField *pNGTSIndex);
};
#endif