rust-bindgen icon indicating copy to clipboard operation
rust-bindgen copied to clipboard

pure virtual functions generated, but virtual function not generated.

Open guotie opened this issue 2 years ago • 0 comments

Input C/C++ Header


class CThostFtdcMdSpi
{
public:
	virtual void OnFrontConnected(){};
	virtual void OnFrontDisconnected(int nReason){};
	virtual void OnHeartBeatWarning(int nTimeLapse){};
	virtual void OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
	virtual void OnRspUserLogout(CThostFtdcUserLogoutField *pUserLogout, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
	virtual void OnRspQryMulticastInstrument(CThostFtdcMulticastInstrumentField *pMulticastInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
	virtual void OnRspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
	virtual void OnRspSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
	virtual void OnRspUnSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
	virtual void OnRspSubForQuoteRsp(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
	virtual void OnRspUnSubForQuoteRsp(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
	virtual void OnRtnDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData) {};
	virtual void OnRtnForQuoteRsp(CThostFtdcForQuoteRspField *pForQuoteRsp) {};
};

class MD_API_EXPORT CThostFtdcMdApi
{
public:
	static CThostFtdcMdApi *CreateFtdcMdApi(const char *pszFlowPath = "", const bool bIsUsingUdp=false, const bool bIsMulticast=false);
	static const char *GetApiVersion();
	virtual void Release() = 0;
	virtual void Init() = 0;
	virtual int Join() = 0;
	virtual const char *GetTradingDay() = 0;
	virtual void RegisterFront(char *pszFrontAddress) = 0;
	virtual void RegisterNameServer(char *pszNsAddress) = 0;
	virtual void RegisterFensUserInfo(CThostFtdcFensUserInfoField * pFensUserInfo) = 0;
	virtual void RegisterSpi(CThostFtdcMdSpi *pSpi) = 0;
	virtual int SubscribeMarketData(char *ppInstrumentID[], int nCount) = 0;
	virtual int UnSubscribeMarketData(char *ppInstrumentID[], int nCount) = 0;
	virtual int SubscribeForQuoteRsp(char *ppInstrumentID[], int nCount) = 0;
	virtual int UnSubscribeForQuoteRsp(char *ppInstrumentID[], int nCount) = 0;
	virtual int ReqUserLogin(CThostFtdcReqUserLoginField *pReqUserLoginField, int nRequestID) = 0;
	virtual int ReqUserLogout(CThostFtdcUserLogoutField *pUserLogout, int nRequestID) = 0;
	virtual int ReqQryMulticastInstrument(CThostFtdcQryMulticastInstrumentField *pQryMulticastInstrument, int nRequestID) = 0;
protected:
	~CThostFtdcMdApi(){};
};

Bindgen Invocation

bindgen::Builder::default()
        // The input header we would like to generate
        // bindings for.
        .header("src/wrapper.hpp")
        // Generate vtable
        .vtable_generation(true)
        // Tell cargo to invalidate the built crate whenever any of the
        // included header files changed.
        .parse_callbacks(Box::new(bindgen::CargoCallbacks))
        // Finish the builder and generate the bindings.
        .generate()
        // Unwrap the Result and panic on failure.
        .expect("Unable to generate bindings");

Actual Results

// Insert the (incorrect/buggy) generated bindings here
#[repr(C)]
pub struct CThostFtdcMdSpi__bindgen_vtable {}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct CThostFtdcMdSpi {
    pub vtable_: *const CThostFtdcMdSpi__bindgen_vtable,
}



#[repr(C)]
pub struct CThostFtdcMdApi__bindgen_vtable {
    pub CThostFtdcMdApi_Release: unsafe extern "C" fn(this: *mut CThostFtdcMdApi),
    pub CThostFtdcMdApi_Init: unsafe extern "C" fn(this: *mut CThostFtdcMdApi),
    pub CThostFtdcMdApi_Join:
        unsafe extern "C" fn(this: *mut CThostFtdcMdApi) -> ::std::os::raw::c_int,
    pub CThostFtdcMdApi_GetTradingDay:
        unsafe extern "C" fn(this: *mut CThostFtdcMdApi) -> *const ::std::os::raw::c_char,
    pub CThostFtdcMdApi_RegisterFront: unsafe extern "C" fn(
        this: *mut CThostFtdcMdApi,
        pszFrontAddress: *mut ::std::os::raw::c_char,
    ),
    pub CThostFtdcMdApi_RegisterNameServer:
        unsafe extern "C" fn(this: *mut CThostFtdcMdApi, pszNsAddress: *mut ::std::os::raw::c_char),
    pub CThostFtdcMdApi_RegisterFensUserInfo: unsafe extern "C" fn(
        this: *mut CThostFtdcMdApi,
        pFensUserInfo: *mut CThostFtdcFensUserInfoField,
    ),
    pub CThostFtdcMdApi_RegisterSpi:
        unsafe extern "C" fn(this: *mut CThostFtdcMdApi, pSpi: *mut CThostFtdcMdSpi),
    pub CThostFtdcMdApi_SubscribeMarketData: unsafe extern "C" fn(
        this: *mut CThostFtdcMdApi,
        ppInstrumentID: *mut *mut ::std::os::raw::c_char,
        nCount: ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int,
    pub CThostFtdcMdApi_UnSubscribeMarketData: unsafe extern "C" fn(
        this: *mut CThostFtdcMdApi,
        ppInstrumentID: *mut *mut ::std::os::raw::c_char,
        nCount: ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int,
    pub CThostFtdcMdApi_SubscribeForQuoteRsp: unsafe extern "C" fn(
        this: *mut CThostFtdcMdApi,
        ppInstrumentID: *mut *mut ::std::os::raw::c_char,
        nCount: ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int,
    pub CThostFtdcMdApi_UnSubscribeForQuoteRsp: unsafe extern "C" fn(
        this: *mut CThostFtdcMdApi,
        ppInstrumentID: *mut *mut ::std::os::raw::c_char,
        nCount: ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int,
    pub CThostFtdcMdApi_ReqUserLogin: unsafe extern "C" fn(
        this: *mut CThostFtdcMdApi,
        pReqUserLoginField: *mut CThostFtdcReqUserLoginField,
        nRequestID: ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int,
    pub CThostFtdcMdApi_ReqUserLogout: unsafe extern "C" fn(
        this: *mut CThostFtdcMdApi,
        pUserLogout: *mut CThostFtdcUserLogoutField,
        nRequestID: ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int,
    pub CThostFtdcMdApi_ReqQryMulticastInstrument: unsafe extern "C" fn(
        this: *mut CThostFtdcMdApi,
        pQryMulticastInstrument: *mut CThostFtdcQryMulticastInstrumentField,
        nRequestID: ::std::os::raw::c_int,
    )
        -> ::std::os::raw::c_int,
}
#[repr(C)]
#[derive(Debug)]
pub struct CThostFtdcMdApi {
    pub vtable_: *const CThostFtdcMdApi__bindgen_vtable,
}

Expect Result

the CThostFtdcMdSpi__bindgen_vtable is empty.

guotie avatar Jul 29 '23 06:07 guotie