HRESULT CREATE_IFABRICINSTANCE_NAME()

in sfwrapper/inc/sf_macros.h [23:53]


HRESULT CREATE_IFABRICINSTANCE_NAME(IFabricType)(IFabricType** fabricVariable)                                                                                                                                   \
{                                                                                                                                                                                                   \
    HRESULT hr;                                                                                                                                                                                     \
    if (fabricVariable == NULL)                                                                                                                                                                     \
    {                                                                                                                                                                                               \
        LogError("invalid argument fabricVariable=%p", fabricVariable);                                                                                                                             \
        hr = E_POINTER;                                                                                                                                                                             \
    }                                                                                                                                                                                               \
    else                                                                                                                                                                                            \
    {                                                                                                                                                                                               \
        /*clean it if needed*/                                                                                                                                                                      \
        if (*fabricVariable != NULL)                                                                                                                                                                \
        {                                                                                                                                                                                           \
            LogInfo("cleaning *fabricVariable=%p", *fabricVariable);                                                                                                                                \
            (void)((IFabricType*)*fabricVariable)->lpVtbl->Release((IFabricType*)*fabricVariable);                                                                                                  \
        }                                                                                                                                                                                           \
                                                                                                                                                                                                    \
        /*re-create in place*/                                                                                                                                                                      \
        hr = FabricCreateLocalClient(&MU_C2(IID_, IFabricType), fabricVariable); /*all IFabricWhateverSomethingClient are created with this call, passing a different interface IID*/               \
        if (FAILED(hr))                                                                                                                                                                             \
        {                                                                                                                                                                                           \
            LogHRESULTError(hr, "failure in FabricCreateLocalClient");                                                                                                                              \
            /*return as is*/                                                                                                                                                                        \
        }                                                                                                                                                                                           \
        else                                                                                                                                                                                        \
        {                                                                                                                                                                                           \
            /*well - it seems to have been created "in place", return hr "as is"*/                                                                                                                  \
        }                                                                                                                                                                                           \
    }                                                                                                                                                                                               \
    return hr;                                                                                                                                                                                      \
}                                                                                                                                                                                                   \