Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pure virtual functions generated, but virtual function not generated. #2593

Open
guotie opened this issue Jul 29, 2023 · 0 comments
Open

pure virtual functions generated, but virtual function not generated. #2593

guotie opened this issue Jul 29, 2023 · 0 comments

Comments

@guotie
Copy link

guotie commented Jul 29, 2023

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant