static MI_Result NewDynamicInstance(_In_ MI_Context* context, _In_ const MI_Char* className, MI_Uint32 flags, _Outptr_ MI_Instance** instance)
{
    #if defined(_MSC_VER)
    return Instance_InitDynamic(instance, className, flags);
    #else
    return Instance_NewDynamic(instance, className, flags, NULL);
    #endif
}
Esempio n. 2
0
/* Convert config to instance */
_Use_decl_annotations_
MI_Result Config_ToInstance(
    Batch* batch,
    const Config* config,
    MI_Instance **instanceOut)
{
    MI_Instance *instance;
    MI_Result r;
    MI_Value value;

    MI_Char* className = Batch_StrTcsdup(batch, config->className);
    r = Instance_NewDynamic(&instance, CONFIG_CLASSNAME, MI_FLAG_CLASS, batch);
    if (r != MI_RESULT_OK)
        return r;
    value.string = className;
    r = MI_Instance_AddElement(instance, MI_T("className"), &value, MI_STRING, MI_FLAG_KEY);
    if (r != MI_RESULT_OK)
        return r;

    /*
    value.string = Batch_StrTcsdup(batch, config->configFilepath);
    r = MI_Instance_AddElement(instance, MI_T("configFilepath"), &value, MI_STRING, 0);
    if (r != MI_RESULT_OK)
        return r;
    */

    value.uint32 = config->testGroup;
    r = MI_Instance_AddElement(instance, MI_T("testGroup"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->intervalMS;
    r = MI_Instance_AddElement(instance, MI_T("intervalMS"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->failAfterCount;
    r = MI_Instance_AddElement(instance, MI_T("failAfterCount"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->failResult;
    r = MI_Instance_AddElement(instance, MI_T("failResult"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->initBehavior;
    r = MI_Instance_AddElement(instance, MI_T("initBehavior"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->initResultCode;
    r = MI_Instance_AddElement(instance, MI_T("initResultCode"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->initTimeoutMS;
    r = MI_Instance_AddElement(instance, MI_T("initTimeoutMS"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->finalizeBehavior;
    r = MI_Instance_AddElement(instance, MI_T("finalizeBehavior"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->finalizeResultCode;
    r = MI_Instance_AddElement(instance, MI_T("finalizeResultCode"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->postBehavior;
    r = MI_Instance_AddElement(instance, MI_T("postBehavior"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->miscTestSubGroup;
    r = MI_Instance_AddElement(instance, MI_T("miscTestSubGroup"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    if (config->subscribeBookmark)
    {
        value.string = Batch_StrTcsdup(batch, config->subscribeBookmark);
        r = MI_Instance_AddElement(instance, MI_T("subscribeBookmark"), &value, MI_STRING, 0);
        if (r != MI_RESULT_OK)
            return r;
    }

    if (config->providerBookmark)
    {
        value.string = Batch_StrTcsdup(batch, config->providerBookmark);
        r = MI_Instance_AddElement(instance, MI_T("providerBookmark"), &value, MI_STRING, 0);
        if (r != MI_RESULT_OK)
            return r;
    }

    if (config->dialect)
    {
        value.string = Batch_StrTcsdup(batch, config->dialect);
        r = MI_Instance_AddElement(instance, MI_T("dialect"), &value, MI_STRING, 0);
        if (r != MI_RESULT_OK)
            return r;
    }

    if (config->expression)
    {
        value.string = Batch_StrTcsdup(batch, config->expression);
        r = MI_Instance_AddElement(instance, MI_T("expression"), &value, MI_STRING, 0);
        if (r != MI_RESULT_OK)
            return r;
    }

    value.uint32 = config->evalResult;
    r = MI_Instance_AddElement(instance, MI_T("evalResult"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->logLoadUnloadCall;
    r = MI_Instance_AddElement(instance, MI_T("logLoadUnloadCall"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->currentSubscriptionTypes;
    r = MI_Instance_AddElement(instance, MI_T("currentSubscriptionTypes"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    value.uint32 = config->supportedSubscriptionTypes;
    r = MI_Instance_AddElement(instance, MI_T("supportedSubscriptionTypes"), &value, MI_UINT32, 0);
    if (r != MI_RESULT_OK)
        return r;

    *instanceOut = instance;
    return MI_RESULT_OK;
}