[問題] C# 引用 C++ dll的問題
我目前開發的程式語言是C#,最近拿到一個API的文件,需引用HsFutuSDK.dll裡的
function
已我所知的,我目前只能使用DllImport三個function
1. IFuMessage* HSAPI NewFuMessage(int iMsgType = MSG_TYPE_UNKNOWN,int
iMsgMode = MSG_MODE_UNKNOWN);
2. IHsFutuComm* HSAPI NewFuCommObj(void* lpReserved = NULL);
3. int HSAPI GetSDKVersion();(已能呼叫成功)
我的問題,大概都在於如何改成讓C#可使用他struct裡的功能,如:
1. 是要如何去引用在 IHsFutuComm 裡的function 如 SetConfig、Start等。
2. 像virtual unsigned long HSAPI QueryInterface( const char * iid, IHSKnown
**ppv ) = 0; 這種的重新宣告成C# 要如何改
是否有人能解我疑惑?感激!!!!
C++使用的範例內容的程式標頭檔,例了一些,如下:
#ifndef _FUTU_MESSAGE_INTERFACE_H_
#define _FUTU_MESSAGE_INTERFACE_H_
#include "futu_data_types.h"
#ifdef _WIN32
# ifdef HSAPI
# undef HSAPI
# endif
# define HSAPI __stdcall
#else
# define HSAPI
#endif
struct IHSKnown
{
virtual unsigned long HSAPI QueryInterface( const char * iid, IHSKnown
**ppv ) = 0;
virtual unsigned long HSAPI AddRef() = 0;
virtual unsigned long HSAPI Release() = 0;
};
struct IFuMessage:public IHSKnown
{
virtual int HSAPI SetMsgType(int iType,int iMode) = 0;
virtual int HSAPI GetMsgType(int* lpMsgMode = NULL) = 0;
virtual int HSAPI GetCount() = 0;
virtual IFuRecord* HSAPI AddRecord() = 0;
virtual IFuRecord* HSAPI GetRecord(int iIndex = 0) = 0;
virtual int HSAPI DelRecord(int iIndex = 0) = 0;
virtual int HSAPI Clear() = 0;
};
struct IFuRecord:public IHSKnown
{
virtual int HSAPI SetChar(const char* sField,char cValue) = 0;
virtual int HSAPI SetInt(const char* sField,int iValue) = 0;
virtual int HSAPI SetDouble(const char* sField,double dValue) = 0;
virtual int HSAPI SetString(const char* sField,const char* strValue) = 0;
virtual char HSAPI GetChar(const char* sField) = 0;
virtual int HSAPI GetInt(const char* sField) = 0;
virtual double HSAPI GetDouble(const char* sField) = 0;
virtual const char* HSAPI GetString(const char* sField) = 0;
virtual int HSAPI MoveFirst() = 0;
virtual int HSAPI MoveNext() = 0;
virtual int HSAPI IsEOF() = 0;
virtual const char* HSAPI GetFieldName() = 0;
virtual int HSAPI RemoveField(const char* sField) = 0;
virtual int HSAPI IsExist(const char* sField) = 0;
virtual int HSAPI Clear() = 0;
virtual int HSAPI GetCount() = 0;
};
struct IHsFutuComm:public IHSKnown
{
virtual int HSAPI SetConfig(const char* szSection,const char* szName,const
char* szVal) = 0;
virtual int HSAPI Init(IFuCallBack* lpCallback = NULL,int iTimeOut = 5000) =
0;
virtual int HSAPI Start(int iType,int iTimeOut = 5000) = 0;
virtual int HSAPI DoLogin(const char *szUserID,const char* szUserPass,const
void* lpReserved = NULL) = 0;
virtual int HSAPI AsyncSend(const IFuMessage* lpReqMsg,int iKeyID = -1) = 0;
virtual int HSAPI SyncSendRecv(const IFuMessage* lpReqMsg,IFuMessage*
lpAnsMsg,int iTimeout = 3000) = 0;
virtual int HSAPI SubscribeRequest(REGType rType,REGAction rAction,const
char* szParam) = 0;
virtual int HSAPI DoLogout(const char* szUserID,const void* lpReserved =
NULL) = 0;
virtual int HSAPI Stop() = 0;
virtual int HSAPI GetStatus(int iIndex) = 0;
virtual const char* HSAPI GetErrorMsg(int iErrNo) = 0;
virtual int HSAPI SetKeyData(const void* lpKeyData,int iLen) = 0;
virtual const void* HSAPI GetKeyData(int* iLen) = 0;
};
struct IFuCallBack:public IHSKnown
{
virtual void HSAPI OnNotifyConnState(IHsFutuComm* lpComm,int iType,int
iStatus,const char* szNotifyTime,const char* szMessage) = 0;
virtual void HSAPI OnRspLogin(IHsFutuComm* lpComm,IFuMessage* lpMsg) = 0;
virtual void HSAPI OnRspLogout(IHsFutuComm* lpComm,IFuMessage* lpMsg) = 0;
virtual void HSAPI OnRspSubResult(IHsFutuComm* lpComm,REGType
sType,REGAction aAction,int iResult,const char* lpParam,const char*
szMessage) = 0;
virtual void HSAPI OnReceivedBiz(IHsFutuComm* lpComm,IFuMessage*
lpAnsData,int iRet,int iKeyID) = 0;
virtual void HSAPI OnRecvMarketData(IHsFutuComm* lpComm,CMarketInfo*
lpInfo,REGAction rAction) = 0;
virtual void HSAPI OnRecvArgMarketData(IHsFutuComm* lpComm,CArgMarketInfo*
lpInfo,REGAction rAction) = 0;
virtual void HSAPI OnRecvOrderInfo(IHsFutuComm* lpComm,const COrderRspInfo*
lpInfo) = 0;
virtual void HSAPI OnRecvOrderRealInfo(IHsFutuComm* lpComm,const
CRealRspInfo* lpInfo) = 0;
virtual void HSAPI OnRspOnlineMsg(IHsFutuComm* lpComm,const char*
szUsrID,const char* szMessage) = 0;
};
#ifdef __cplusplus
extern "C"
{
#endif
IFuMessage* HSAPI NewFuMessage(int iMsgType = MSG_TYPE_UNKNOWN,int
iMsgMode = MSG_MODE_UNKNOWN);
IHsFutuComm* HSAPI NewFuCommObj(void* lpReserved = NULL);
int HSAPI GetSDKVersion();
#ifdef __cplusplus
}
#endif
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.38.240.23
推
05/22 01:38, , 1F
05/22 01:38, 1F
→
05/22 13:55, , 2F
05/22 13:55, 2F
→
05/23 08:36, , 3F
05/23 08:36, 3F
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章