diff --git a/src/c-wrapper/api/c-chat-room.cpp b/src/c-wrapper/api/c-chat-room.cpp index 6da8b0c6e..652ccb466 100644 --- a/src/c-wrapper/api/c-chat-room.cpp +++ b/src/c-wrapper/api/c-chat-room.cpp @@ -159,7 +159,7 @@ LinphoneCall *linphone_chat_room_get_call (const LinphoneChatRoom *cr) { void linphone_chat_room_set_call (LinphoneChatRoom *cr, LinphoneCall *call) { if (linphone_core_realtime_text_enabled(linphone_chat_room_get_core(cr))) - static_cast(L_GET_PRIVATE_FROM_C_OBJECT(cr))->setCall(call); + L_GET_PRIVATE_FROM_C_OBJECT(cr, RealTimeTextChatRoom)->setCall(call); } bctbx_list_t *linphone_chat_room_get_transient_messages (const LinphoneChatRoom *cr) { diff --git a/src/c-wrapper/internal/c-tools.h b/src/c-wrapper/internal/c-tools.h index bbaed56d7..3316a93fc 100644 --- a/src/c-wrapper/internal/c-tools.h +++ b/src/c-wrapper/internal/c-tools.h @@ -430,9 +430,12 @@ LINPHONE_END_NAMESPACE // Get/set the cpp-ptr of a wrapped C object. #define L_GET_CPP_PTR_FROM_C_OBJECT_1_ARGS(C_OBJECT) \ - L_GET_CPP_PTR_FROM_C_OBJECT_2_ARGS(C_OBJECT, ) + LINPHONE_NAMESPACE::Wrapper::getCppPtrFromC(C_OBJECT) #define L_GET_CPP_PTR_FROM_C_OBJECT_2_ARGS(C_OBJECT, CPP_TYPE) \ - LINPHONE_NAMESPACE::Wrapper::getCppPtrFromC(C_OBJECT) + LINPHONE_NAMESPACE::Wrapper::getCppPtrFromC< \ + std::remove_pointer::type, \ + LINPHONE_NAMESPACE::CPP_TYPE \ + >(C_OBJECT) #define L_GET_CPP_PTR_FROM_C_OBJECT_MACRO_CHOOSER(...) \ L_GET_ARG_3(__VA_ARGS__, L_GET_CPP_PTR_FROM_C_OBJECT_2_ARGS, L_GET_CPP_PTR_FROM_C_OBJECT_1_ARGS) @@ -449,8 +452,16 @@ LINPHONE_END_NAMESPACE LINPHONE_NAMESPACE::Wrapper::getPrivate(LINPHONE_NAMESPACE::Utils::getPtr(CPP_OBJECT)) // Get the private data of a shared or simple cpp-ptr of a wrapped C object. -#define L_GET_PRIVATE_FROM_C_OBJECT(C_OBJECT) \ +#define L_GET_PRIVATE_FROM_C_OBJECT_1_ARGS(C_OBJECT) \ L_GET_PRIVATE(LINPHONE_NAMESPACE::Utils::getPtr(L_GET_CPP_PTR_FROM_C_OBJECT(C_OBJECT))) +#define L_GET_PRIVATE_FROM_C_OBJECT_2_ARGS(C_OBJECT, CPP_TYPE) \ + L_GET_PRIVATE(LINPHONE_NAMESPACE::Utils::getPtr(L_GET_CPP_PTR_FROM_C_OBJECT(C_OBJECT, CPP_TYPE))) + +#define L_GET_PRIVATE_FROM_C_OBJECT_MACRO_CHOOSER(...) \ + L_GET_ARG_3(__VA_ARGS__, L_GET_PRIVATE_FROM_C_OBJECT_2_ARGS, L_GET_PRIVATE_FROM_C_OBJECT_1_ARGS) + +#define L_GET_PRIVATE_FROM_C_OBJECT(...) \ + L_GET_PRIVATE_FROM_C_OBJECT_MACRO_CHOOSER(__VA_ARGS__)(__VA_ARGS__) // Get the wrapped C object of a C++ object. #define L_GET_C_BACK_PTR(CPP_OBJECT) \