Merge pull request #1809 from nanoric/tap

[Fix] TapApi: fixed nullptr error.
This commit is contained in:
vn.py 2019-06-07 23:20:46 +08:00 committed by GitHub
commit dbdb099a95
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 49 additions and 26 deletions

View File

@ -1,19 +1,20 @@
#!/usr/bin/env bash
# autocxxpy version: 0.2.4
# autocxxpy version: 0.2.5
python -m autocxxpy \
vntap \
iTapTradeAPI.h TapQuoteAPI.h TapAPIError.h iTapAPIError.h \
-I vntap/include \
-A custom/custom_wrappers.hpp\
--output-dir vntap/generated_files \
--pyi-output-dir . \
\
--no-clear-pyi-output \
\
--output-arg-pattern \
"(.*API::.*(sessionID$|.*ClientBuyOrderNo$|.*ClientSellOrderNo$|.*ClientOrderNo$))|(.*Result)" \
\
--no-callback-pattern \
".*API::.*"
vntap \
iTapTradeAPI.h TapQuoteAPI.h TapAPIError.h iTapAPIError.h \
-I vntap/include \
-A custom/custom_wrappers.hpp\
--output-dir vntap/generated_files \
--copy-autocxxpy-includes vntap/include \
--pyi-output-dir . \
\
--no-clear-pyi-output \
\
--output-arg-pattern \
"(.*API::.*(sessionID$|.*ClientBuyOrderNo$|.*ClientSellOrderNo$|.*ClientOrderNo$))|(.*Result)" \
\
--no-callback-pattern \
".*API::.*"
python generate_error_map.py

Binary file not shown.

View File

@ -7,7 +7,7 @@ if typing.TYPE_CHECKING:
from .vntap import *
def set_async_callback_exception_handler(handler: Callable[[AsyncDispatchException], bool]):
def set_async_callback_exception_handler(handler: Callable[[AsyncDispatchException], None]):
"""
set a customize exception handler for async callback in this module(pyd)
\a handler should return True if it handles that exception,

View File

@ -46,13 +46,20 @@ namespace autocxxpy
template<>
struct callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRspOrderAction>
{
inline static void call(ITapTrade::ITapTradeAPINotify* instance, const char*py_func_name, ITapTrade::TAPIUINT32 sessionID, ITapTrade::TAPIINT32 errorCode, const ITapTrade::TapAPIOrderActionRsp* info)
inline static void call(ITapTrade::ITapTradeAPINotify* instance, const char* py_func_name, ITapTrade::TAPIUINT32 sessionID, ITapTrade::TAPIINT32 errorCode, const ITapTrade::TapAPIOrderActionRsp* info)
{
ITapTrade::TapAPIOrderInfo orderInfo = *info->OrderInfo;
ITapTrade::TapAPIOrderInfo orderInfo;
if (info->OrderInfo != nullptr)
{
orderInfo = *info->OrderInfo;
}
ITapTrade::TapAPIOrderActionRsp copied_info = *info;
auto task = [=]() mutable
{
copied_info.OrderInfo = &orderInfo; // ensure pointer is pointer to the correct address(address changes after constructed lambda)
if (copied_info.OrderInfo != nullptr)
{
copied_info.OrderInfo = &orderInfo; // ensure pointer is pointer to the correct address(address changes after constructed lambda)
}
return default_callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRspOrderAction>::sync(instance, py_func_name, sessionID, errorCode, &copied_info);
};
dispatcher::instance().add(std::move(task));
@ -61,13 +68,20 @@ namespace autocxxpy
template<>
struct callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRtnOrder>
{
inline static void call(ITapTrade::ITapTradeAPINotify* instance, const char*py_func_name, const ITapTrade::TapAPIOrderInfoNotice* info)
inline static void call(ITapTrade::ITapTradeAPINotify* instance, const char* py_func_name, const ITapTrade::TapAPIOrderInfoNotice* info)
{
ITapTrade::TapAPIOrderInfo orderInfo = *info->OrderInfo;
ITapTrade::TapAPIOrderInfo orderInfo;
if (info->OrderInfo != nullptr)
{
orderInfo = *info->OrderInfo;
}
ITapTrade::TapAPIOrderInfoNotice copied_info = *info;
auto task = [=]() mutable
{
copied_info.OrderInfo = &orderInfo; // ensure pointer is pointer to the correct address(address changes after constructed lambda)
if (copied_info.OrderInfo != nullptr)
{
copied_info.OrderInfo = &orderInfo; // ensure pointer is pointer to the correct address(address changes after constructed lambda)
}
return default_callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRtnOrder>::sync(instance, py_func_name, &copied_info);
};
dispatcher::instance().add(std::move(task));
@ -77,13 +91,21 @@ namespace autocxxpy
template<>
struct callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRtnPositionProfit>
{
inline static void call(ITapTrade::ITapTradeAPINotify* instance, const char*py_func_name, const ITapTrade::TapAPIPositionProfitNotice* info)
inline static void call(ITapTrade::ITapTradeAPINotify* instance, const char* py_func_name, const ITapTrade::TapAPIPositionProfitNotice* info)
{
ITapTrade::TapAPIPositionProfit profit = *info->Data;
ITapTrade::TapAPIPositionProfit profit;
if (info->Data != nullptr)
{
profit = *info->Data;
}
ITapTrade::TapAPIPositionProfitNotice copied_info = *info;
auto task = [=]() mutable
{
copied_info.Data = &profit; // ensure pointer is pointer to the correct address(address changes after constructed lambda)
if (copied_info.Data != nullptr)
{
copied_info.Data = &profit; // ensure pointer is pointer to the correct address(address changes after constructed lambda)
}
return default_callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRtnPositionProfit>::sync(instance, py_func_name, &copied_info);
};
dispatcher::instance().add(std::move(task));

View File

@ -7,7 +7,7 @@ if typing.TYPE_CHECKING:
from .vntap import *
def set_async_callback_exception_handler(handler: Callable[[AsyncDispatchException], bool]):
def set_async_callback_exception_handler(handler: Callable[[AsyncDispatchException], None]):
"""
set a customize exception handler for async callback in this module(pyd)
\a handler should return True if it handles that exception,