/**********************************************************************
// @@@ START COPYRIGHT @@@
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License.  You may obtain a copy of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.
//
// @@@ END COPYRIGHT @@@
**********************************************************************/
#ifndef ODBCCFG_H_
#define ODBCCFG_H_
/*
 * Translation unit: ODBCCFG
 * Generated by CNPGEN(TANTAU CNPGEN TANTAU_AG_PC8 20001120.103031) on Mon Jan 31 11:14:08 2011
 * C++ constructs used
 * Header file for use with the CEE
 * Server functionality included
 */
#include <stdarg.h>
#include <cee.h>
#if CEE_H_VERSION != 19991123
#error Version mismatch CEE_H_VERSION != 19991123
#endif
#include <idltype.h>
#if IDL_TYPE_H_VERSION != 19971225
#error Version mismatch IDL_TYPE_H_VERSION != 19971225
#endif

/********************
 * Module 'odbccfg' *
 ********************/

/******************************
 * Interface 'odbccfg_CfgSvc' *
 ******************************/
typedef IDL_Object odbccfg_CfgSvc;
struct odbccfg_CfgSvc_ParamError { /* Exception */ 
  IDL_string ParamDesc;
  IDL_PTR_PAD(ParamDesc, 1)
};
struct odbccfg_CfgSvc_CriticalError { /* Exception */ 
  IDL_string ErrorDesc;
  IDL_PTR_PAD(ErrorDesc, 1)
};
struct odbccfg_CfgSvc_SQLError { /* Exception */ 
  ERROR_DESC_LIST_def errorList;
};
/* Exception odbccfg_CfgSvc_SQLNoDataFound has no members */
/* Exception odbccfg_CfgSvc_CFGDataError has no members */
/* Exception odbccfg_CfgSvc_DatabaseFound has no members */
/* Exception odbccfg_CfgSvc_SQLInvalidHandle has no members */
/* Exception odbccfg_CfgSvc_DatabaseNotFound has no members */
/* Exception odbccfg_CfgSvc_WrongUserPassword has no members */
/* Exception odbccfg_CfgSvc_ServerError has no members */

/************************************************
 * Operation 'odbccfg_CfgSvc_GetObjectNameList' *
 ************************************************/

/*
 * Exception number constants for
 * operation 'odbccfg_CfgSvc_GetObjectNameList'
 */
#define odbccfg_CfgSvc_GetObjectNameList_ParamError_exn_ 1
#define odbccfg_CfgSvc_GetObjectNameList_SQLError_exn_ 2
#define odbccfg_CfgSvc_GetObjectNameList_SQLNoDataFound_exn_ 3
/*
 * Exception union for
 * operation 'odbccfg_CfgSvc_GetObjectNameList'
 */
struct odbccfg_CfgSvc_GetObjectNameList_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbccfg_CfgSvc_ParamError ParamError;
    odbccfg_CfgSvc_SQLError SQLError;
  } u;
};
/*
 * Local index for operation 'odbccfg_CfgSvc_GetObjectNameList'
 */
#define odbccfg_CfgSvc_GetObjectNameList_ldx_ ((IDL_unsigned_long) 1)
/*
 * Operation synopsis for operation 'odbccfg_CfgSvc_GetObjectNameList'
 */
#define odbccfg_CfgSvc_GetObjectNameList_osy_ ((IDL_long) 2096703100)
/*
 * Asynchronous method function pointer type for
 * operation 'odbccfg_CfgSvc_GetObjectNameList'
 */
typedef void (*odbccfg_CfgSvc_GetObjectNameList_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ IDL_long ObjectType
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbccfg_CfgSvc_GetObjectNameList'
 */
extern "C" void
odbccfg_CfgSvc_GetObjectNameList_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ IDL_long ObjectType
  );
/*
 * Set Asynchronous Method for
 * operation 'odbccfg_CfgSvc_GetObjectNameList'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetObjectNameList_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_GetObjectNameList_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbccfg_CfgSvc_GetObjectNameList'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetObjectNameList_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbccfg_CfgSvc_GetObjectNameList_exc_ *exception_
  , /* In    */ const DATASOURCE_LIST_def *ObjectNameList
  , /* In    */ const ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function pointer type for
 * operation'odbccfg_CfgSvc_GetObjectNameList'
 */
typedef void (*odbccfg_CfgSvc_GetObjectNameList_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_GetObjectNameList_exc_ *exception_
  , /* In    */ IDL_long ObjectType
  , /* Out   */ DATASOURCE_LIST_def *ObjectNameList
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function prototype for
 * operation 'odbccfg_CfgSvc_GetObjectNameList'
 */
extern "C" void
odbccfg_CfgSvc_GetObjectNameList_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_GetObjectNameList_exc_ *exception_
  , /* In    */ IDL_long ObjectType
  , /* Out   */ DATASOURCE_LIST_def *ObjectNameList
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Set Synchronous method for
 * operation 'odbccfg_CfgSvc_GetObjectNameList'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetObjectNameList_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_GetObjectNameList_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbccfg_CfgSvc_GetObjectNameList'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetObjectNameList_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_GetObjectNameList_smt_ method_
  );

/********************************************
 * Operation 'odbccfg_CfgSvc_GetDataSource' *
 ********************************************/

/*
 * Exception number constants for
 * operation 'odbccfg_CfgSvc_GetDataSource'
 */
#define odbccfg_CfgSvc_GetDataSource_ParamError_exn_ 1
#define odbccfg_CfgSvc_GetDataSource_SQLError_exn_ 2
#define odbccfg_CfgSvc_GetDataSource_SQLNoDataFound_exn_ 3
/*
 * Exception union for
 * operation 'odbccfg_CfgSvc_GetDataSource'
 */
struct odbccfg_CfgSvc_GetDataSource_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbccfg_CfgSvc_ParamError ParamError;
    odbccfg_CfgSvc_SQLError SQLError;
  } u;
};
/*
 * Local index for operation 'odbccfg_CfgSvc_GetDataSource'
 */
#define odbccfg_CfgSvc_GetDataSource_ldx_ ((IDL_unsigned_long) 2)
/*
 * Operation synopsis for operation 'odbccfg_CfgSvc_GetDataSource'
 */
#define odbccfg_CfgSvc_GetDataSource_osy_ ((IDL_long) 1549236394)
/*
 * Asynchronous method function pointer type for
 * operation 'odbccfg_CfgSvc_GetDataSource'
 */
typedef void (*odbccfg_CfgSvc_GetDataSource_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *KeyValue
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbccfg_CfgSvc_GetDataSource'
 */
extern "C" void
odbccfg_CfgSvc_GetDataSource_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *KeyValue
  );
/*
 * Set Asynchronous Method for
 * operation 'odbccfg_CfgSvc_GetDataSource'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetDataSource_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_GetDataSource_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbccfg_CfgSvc_GetDataSource'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetDataSource_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbccfg_CfgSvc_GetDataSource_exc_ *exception_
  , /* In    */ const DATASOURCE_DESC_def *DSValues
  , /* In    */ const ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function pointer type for
 * operation'odbccfg_CfgSvc_GetDataSource'
 */
typedef void (*odbccfg_CfgSvc_GetDataSource_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_GetDataSource_exc_ *exception_
  , /* In    */ const IDL_char *KeyValue
  , /* Out   */ DATASOURCE_DESC_def *DSValues
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function prototype for
 * operation 'odbccfg_CfgSvc_GetDataSource'
 */
extern "C" void
odbccfg_CfgSvc_GetDataSource_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_GetDataSource_exc_ *exception_
  , /* In    */ const IDL_char *KeyValue
  , /* Out   */ DATASOURCE_DESC_def *DSValues
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Set Synchronous method for
 * operation 'odbccfg_CfgSvc_GetDataSource'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetDataSource_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_GetDataSource_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbccfg_CfgSvc_GetDataSource'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetDataSource_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_GetDataSource_smt_ method_
  );

/*********************************************
 * Operation 'odbccfg_CfgSvc_DropDataSource' *
 *********************************************/

/*
 * Exception number constants for
 * operation 'odbccfg_CfgSvc_DropDataSource'
 */
#define odbccfg_CfgSvc_DropDataSource_ParamError_exn_ 1
#define odbccfg_CfgSvc_DropDataSource_SQLError_exn_ 2
#define odbccfg_CfgSvc_DropDataSource_SQLNoDataFound_exn_ 3
#define odbccfg_CfgSvc_DropDataSource_CFGDataError_exn_ 4
/*
 * Exception union for
 * operation 'odbccfg_CfgSvc_DropDataSource'
 */
struct odbccfg_CfgSvc_DropDataSource_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbccfg_CfgSvc_ParamError ParamError;
    odbccfg_CfgSvc_SQLError SQLError;
  } u;
};
/*
 * Local index for operation 'odbccfg_CfgSvc_DropDataSource'
 */
#define odbccfg_CfgSvc_DropDataSource_ldx_ ((IDL_unsigned_long) 3)
/*
 * Operation synopsis for operation 'odbccfg_CfgSvc_DropDataSource'
 */
#define odbccfg_CfgSvc_DropDataSource_osy_ ((IDL_long) -281565797)
/*
 * Asynchronous method function pointer type for
 * operation 'odbccfg_CfgSvc_DropDataSource'
 */
typedef void (*odbccfg_CfgSvc_DropDataSource_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *KeyValue
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbccfg_CfgSvc_DropDataSource'
 */
extern "C" void
odbccfg_CfgSvc_DropDataSource_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *KeyValue
  );
/*
 * Set Asynchronous Method for
 * operation 'odbccfg_CfgSvc_DropDataSource'
 */
extern "C" CEE_status
odbccfg_CfgSvc_DropDataSource_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_DropDataSource_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbccfg_CfgSvc_DropDataSource'
 */
extern "C" CEE_status
odbccfg_CfgSvc_DropDataSource_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbccfg_CfgSvc_DropDataSource_exc_ *exception_
  , /* In    */ const ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function pointer type for
 * operation'odbccfg_CfgSvc_DropDataSource'
 */
typedef void (*odbccfg_CfgSvc_DropDataSource_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_DropDataSource_exc_ *exception_
  , /* In    */ const IDL_char *KeyValue
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function prototype for
 * operation 'odbccfg_CfgSvc_DropDataSource'
 */
extern "C" void
odbccfg_CfgSvc_DropDataSource_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_DropDataSource_exc_ *exception_
  , /* In    */ const IDL_char *KeyValue
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Set Synchronous method for
 * operation 'odbccfg_CfgSvc_DropDataSource'
 */
extern "C" CEE_status
odbccfg_CfgSvc_DropDataSource_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_DropDataSource_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbccfg_CfgSvc_DropDataSource'
 */
extern "C" CEE_status
odbccfg_CfgSvc_DropDataSource_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_DropDataSource_smt_ method_
  );

/********************************************
 * Operation 'odbccfg_CfgSvc_SetDataSource' *
 ********************************************/

/*
 * Exception number constants for
 * operation 'odbccfg_CfgSvc_SetDataSource'
 */
#define odbccfg_CfgSvc_SetDataSource_ParamError_exn_ 1
#define odbccfg_CfgSvc_SetDataSource_SQLError_exn_ 2
#define odbccfg_CfgSvc_SetDataSource_SQLNoDataFound_exn_ 3
/*
 * Exception union for
 * operation 'odbccfg_CfgSvc_SetDataSource'
 */
struct odbccfg_CfgSvc_SetDataSource_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbccfg_CfgSvc_ParamError ParamError;
    odbccfg_CfgSvc_SQLError SQLError;
  } u;
};
/*
 * Local index for operation 'odbccfg_CfgSvc_SetDataSource'
 */
#define odbccfg_CfgSvc_SetDataSource_ldx_ ((IDL_unsigned_long) 4)
/*
 * Operation synopsis for operation 'odbccfg_CfgSvc_SetDataSource'
 */
#define odbccfg_CfgSvc_SetDataSource_osy_ ((IDL_long) -1707767786)
/*
 * Asynchronous method function pointer type for
 * operation 'odbccfg_CfgSvc_SetDataSource'
 */
typedef void (*odbccfg_CfgSvc_SetDataSource_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const DATASOURCE_DESC_def *DSValues
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbccfg_CfgSvc_SetDataSource'
 */
extern "C" void
odbccfg_CfgSvc_SetDataSource_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const DATASOURCE_DESC_def *DSValues
  );
/*
 * Set Asynchronous Method for
 * operation 'odbccfg_CfgSvc_SetDataSource'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SetDataSource_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_SetDataSource_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbccfg_CfgSvc_SetDataSource'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SetDataSource_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbccfg_CfgSvc_SetDataSource_exc_ *exception_
  , /* In    */ const ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function pointer type for
 * operation'odbccfg_CfgSvc_SetDataSource'
 */
typedef void (*odbccfg_CfgSvc_SetDataSource_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_SetDataSource_exc_ *exception_
  , /* In    */ const DATASOURCE_DESC_def *DSValues
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function prototype for
 * operation 'odbccfg_CfgSvc_SetDataSource'
 */
extern "C" void
odbccfg_CfgSvc_SetDataSource_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_SetDataSource_exc_ *exception_
  , /* In    */ const DATASOURCE_DESC_def *DSValues
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Set Synchronous method for
 * operation 'odbccfg_CfgSvc_SetDataSource'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SetDataSource_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_SetDataSource_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbccfg_CfgSvc_SetDataSource'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SetDataSource_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_SetDataSource_smt_ method_
  );

/***********************************************
 * Operation 'odbccfg_CfgSvc_AddNewDataSource' *
 ***********************************************/

/*
 * Exception number constants for
 * operation 'odbccfg_CfgSvc_AddNewDataSource'
 */
#define odbccfg_CfgSvc_AddNewDataSource_ParamError_exn_ 1
#define odbccfg_CfgSvc_AddNewDataSource_SQLError_exn_ 2
#define odbccfg_CfgSvc_AddNewDataSource_SQLNoDataFound_exn_ 3
/*
 * Exception union for
 * operation 'odbccfg_CfgSvc_AddNewDataSource'
 */
struct odbccfg_CfgSvc_AddNewDataSource_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbccfg_CfgSvc_ParamError ParamError;
    odbccfg_CfgSvc_SQLError SQLError;
  } u;
};
/*
 * Local index for operation 'odbccfg_CfgSvc_AddNewDataSource'
 */
#define odbccfg_CfgSvc_AddNewDataSource_ldx_ ((IDL_unsigned_long) 5)
/*
 * Operation synopsis for operation 'odbccfg_CfgSvc_AddNewDataSource'
 */
#define odbccfg_CfgSvc_AddNewDataSource_osy_ ((IDL_long) -1903900215)
/*
 * Asynchronous method function pointer type for
 * operation 'odbccfg_CfgSvc_AddNewDataSource'
 */
typedef void (*odbccfg_CfgSvc_AddNewDataSource_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const DATASOURCE_DESC_def *DSValues
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbccfg_CfgSvc_AddNewDataSource'
 */
extern "C" void
odbccfg_CfgSvc_AddNewDataSource_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const DATASOURCE_DESC_def *DSValues
  );
/*
 * Set Asynchronous Method for
 * operation 'odbccfg_CfgSvc_AddNewDataSource'
 */
extern "C" CEE_status
odbccfg_CfgSvc_AddNewDataSource_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_AddNewDataSource_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbccfg_CfgSvc_AddNewDataSource'
 */
extern "C" CEE_status
odbccfg_CfgSvc_AddNewDataSource_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbccfg_CfgSvc_AddNewDataSource_exc_ *exception_
  , /* In    */ const ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function pointer type for
 * operation'odbccfg_CfgSvc_AddNewDataSource'
 */
typedef void (*odbccfg_CfgSvc_AddNewDataSource_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_AddNewDataSource_exc_ *exception_
  , /* In    */ const DATASOURCE_DESC_def *DSValues
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function prototype for
 * operation 'odbccfg_CfgSvc_AddNewDataSource'
 */
extern "C" void
odbccfg_CfgSvc_AddNewDataSource_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_AddNewDataSource_exc_ *exception_
  , /* In    */ const DATASOURCE_DESC_def *DSValues
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Set Synchronous method for
 * operation 'odbccfg_CfgSvc_AddNewDataSource'
 */
extern "C" CEE_status
odbccfg_CfgSvc_AddNewDataSource_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_AddNewDataSource_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbccfg_CfgSvc_AddNewDataSource'
 */
extern "C" CEE_status
odbccfg_CfgSvc_AddNewDataSource_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_AddNewDataSource_smt_ method_
  );

/**************************************************
 * Operation 'odbccfg_CfgSvc_CheckDataSourceName' *
 **************************************************/

/*
 * Exception number constants for
 * operation 'odbccfg_CfgSvc_CheckDataSourceName'
 */
#define odbccfg_CfgSvc_CheckDataSourceName_ParamError_exn_ 1
#define odbccfg_CfgSvc_CheckDataSourceName_SQLError_exn_ 2
#define odbccfg_CfgSvc_CheckDataSourceName_SQLNoDataFound_exn_ 3
/*
 * Exception union for
 * operation 'odbccfg_CfgSvc_CheckDataSourceName'
 */
struct odbccfg_CfgSvc_CheckDataSourceName_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbccfg_CfgSvc_ParamError ParamError;
    odbccfg_CfgSvc_SQLError SQLError;
  } u;
};
/*
 * Local index for operation 'odbccfg_CfgSvc_CheckDataSourceName'
 */
#define odbccfg_CfgSvc_CheckDataSourceName_ldx_ ((IDL_unsigned_long) 6)
/*
 * Operation synopsis for operation 'odbccfg_CfgSvc_CheckDataSourceName'
 */
#define odbccfg_CfgSvc_CheckDataSourceName_osy_ ((IDL_long) 28006833)
/*
 * Asynchronous method function pointer type for
 * operation 'odbccfg_CfgSvc_CheckDataSourceName'
 */
typedef void (*odbccfg_CfgSvc_CheckDataSourceName_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *KeyValue
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbccfg_CfgSvc_CheckDataSourceName'
 */
extern "C" void
odbccfg_CfgSvc_CheckDataSourceName_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *KeyValue
  );
/*
 * Set Asynchronous Method for
 * operation 'odbccfg_CfgSvc_CheckDataSourceName'
 */
extern "C" CEE_status
odbccfg_CfgSvc_CheckDataSourceName_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_CheckDataSourceName_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbccfg_CfgSvc_CheckDataSourceName'
 */
extern "C" CEE_status
odbccfg_CfgSvc_CheckDataSourceName_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbccfg_CfgSvc_CheckDataSourceName_exc_ *exception_
  , /* In    */ const ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function pointer type for
 * operation'odbccfg_CfgSvc_CheckDataSourceName'
 */
typedef void (*odbccfg_CfgSvc_CheckDataSourceName_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_CheckDataSourceName_exc_ *exception_
  , /* In    */ const IDL_char *KeyValue
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function prototype for
 * operation 'odbccfg_CfgSvc_CheckDataSourceName'
 */
extern "C" void
odbccfg_CfgSvc_CheckDataSourceName_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_CheckDataSourceName_exc_ *exception_
  , /* In    */ const IDL_char *KeyValue
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Set Synchronous method for
 * operation 'odbccfg_CfgSvc_CheckDataSourceName'
 */
extern "C" CEE_status
odbccfg_CfgSvc_CheckDataSourceName_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_CheckDataSourceName_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbccfg_CfgSvc_CheckDataSourceName'
 */
extern "C" CEE_status
odbccfg_CfgSvc_CheckDataSourceName_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_CheckDataSourceName_smt_ method_
  );

/********************************************
 * Operation 'odbccfg_CfgSvc_GetDSNControl' *
 ********************************************/

/*
 * Exception number constants for
 * operation 'odbccfg_CfgSvc_GetDSNControl'
 */
#define odbccfg_CfgSvc_GetDSNControl_ParamError_exn_ 1
#define odbccfg_CfgSvc_GetDSNControl_SQLError_exn_ 2
#define odbccfg_CfgSvc_GetDSNControl_SQLNoDataFound_exn_ 3
/*
 * Exception union for
 * operation 'odbccfg_CfgSvc_GetDSNControl'
 */
struct odbccfg_CfgSvc_GetDSNControl_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbccfg_CfgSvc_ParamError ParamError;
    odbccfg_CfgSvc_SQLError SQLError;
  } u;
};
/*
 * Local index for operation 'odbccfg_CfgSvc_GetDSNControl'
 */
#define odbccfg_CfgSvc_GetDSNControl_ldx_ ((IDL_unsigned_long) 7)
/*
 * Operation synopsis for operation 'odbccfg_CfgSvc_GetDSNControl'
 */
#define odbccfg_CfgSvc_GetDSNControl_osy_ ((IDL_long) 914615526)
/*
 * Asynchronous method function pointer type for
 * operation 'odbccfg_CfgSvc_GetDSNControl'
 */
typedef void (*odbccfg_CfgSvc_GetDSNControl_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *KeyValue
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbccfg_CfgSvc_GetDSNControl'
 */
extern "C" void
odbccfg_CfgSvc_GetDSNControl_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *KeyValue
  );
/*
 * Set Asynchronous Method for
 * operation 'odbccfg_CfgSvc_GetDSNControl'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetDSNControl_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_GetDSNControl_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbccfg_CfgSvc_GetDSNControl'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetDSNControl_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbccfg_CfgSvc_GetDSNControl_exc_ *exception_
  , /* In    */ IDL_long automation
  , /* In    */ IDL_long curStatus
  , /* In    */ const ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function pointer type for
 * operation'odbccfg_CfgSvc_GetDSNControl'
 */
typedef void (*odbccfg_CfgSvc_GetDSNControl_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_GetDSNControl_exc_ *exception_
  , /* In    */ const IDL_char *KeyValue
  , /* Out   */ IDL_long *automation
  , /* Out   */ IDL_long *curStatus
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function prototype for
 * operation 'odbccfg_CfgSvc_GetDSNControl'
 */
extern "C" void
odbccfg_CfgSvc_GetDSNControl_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_GetDSNControl_exc_ *exception_
  , /* In    */ const IDL_char *KeyValue
  , /* Out   */ IDL_long *automation
  , /* Out   */ IDL_long *curStatus
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Set Synchronous method for
 * operation 'odbccfg_CfgSvc_GetDSNControl'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetDSNControl_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_GetDSNControl_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbccfg_CfgSvc_GetDSNControl'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetDSNControl_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_GetDSNControl_smt_ method_
  );

/********************************************
 * Operation 'odbccfg_CfgSvc_SetDSNControl' *
 ********************************************/

/*
 * Exception number constants for
 * operation 'odbccfg_CfgSvc_SetDSNControl'
 */
#define odbccfg_CfgSvc_SetDSNControl_ParamError_exn_ 1
#define odbccfg_CfgSvc_SetDSNControl_SQLError_exn_ 2
#define odbccfg_CfgSvc_SetDSNControl_SQLNoDataFound_exn_ 3
/*
 * Exception union for
 * operation 'odbccfg_CfgSvc_SetDSNControl'
 */
struct odbccfg_CfgSvc_SetDSNControl_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbccfg_CfgSvc_ParamError ParamError;
    odbccfg_CfgSvc_SQLError SQLError;
  } u;
};
/*
 * Local index for operation 'odbccfg_CfgSvc_SetDSNControl'
 */
#define odbccfg_CfgSvc_SetDSNControl_ldx_ ((IDL_unsigned_long) 8)
/*
 * Operation synopsis for operation 'odbccfg_CfgSvc_SetDSNControl'
 */
#define odbccfg_CfgSvc_SetDSNControl_osy_ ((IDL_long) -884368217)
/*
 * Asynchronous method function pointer type for
 * operation 'odbccfg_CfgSvc_SetDSNControl'
 */
typedef void (*odbccfg_CfgSvc_SetDSNControl_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *KeyValue
  , /* In    */ IDL_long automation
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbccfg_CfgSvc_SetDSNControl'
 */
extern "C" void
odbccfg_CfgSvc_SetDSNControl_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *KeyValue
  , /* In    */ IDL_long automation
  );
/*
 * Set Asynchronous Method for
 * operation 'odbccfg_CfgSvc_SetDSNControl'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SetDSNControl_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_SetDSNControl_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbccfg_CfgSvc_SetDSNControl'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SetDSNControl_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbccfg_CfgSvc_SetDSNControl_exc_ *exception_
  , /* In    */ const ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function pointer type for
 * operation'odbccfg_CfgSvc_SetDSNControl'
 */
typedef void (*odbccfg_CfgSvc_SetDSNControl_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_SetDSNControl_exc_ *exception_
  , /* In    */ const IDL_char *KeyValue
  , /* In    */ IDL_long automation
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function prototype for
 * operation 'odbccfg_CfgSvc_SetDSNControl'
 */
extern "C" void
odbccfg_CfgSvc_SetDSNControl_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_SetDSNControl_exc_ *exception_
  , /* In    */ const IDL_char *KeyValue
  , /* In    */ IDL_long automation
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Set Synchronous method for
 * operation 'odbccfg_CfgSvc_SetDSNControl'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SetDSNControl_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_SetDSNControl_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbccfg_CfgSvc_SetDSNControl'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SetDSNControl_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_SetDSNControl_smt_ method_
  );

/************************************************
 * Operation 'odbccfg_CfgSvc_GetResourceValues' *
 ************************************************/

/*
 * Exception number constants for
 * operation 'odbccfg_CfgSvc_GetResourceValues'
 */
#define odbccfg_CfgSvc_GetResourceValues_ParamError_exn_ 1
#define odbccfg_CfgSvc_GetResourceValues_SQLError_exn_ 2
#define odbccfg_CfgSvc_GetResourceValues_SQLNoDataFound_exn_ 3
/*
 * Exception union for
 * operation 'odbccfg_CfgSvc_GetResourceValues'
 */
struct odbccfg_CfgSvc_GetResourceValues_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbccfg_CfgSvc_ParamError ParamError;
    odbccfg_CfgSvc_SQLError SQLError;
  } u;
};
/*
 * Local index for operation 'odbccfg_CfgSvc_GetResourceValues'
 */
#define odbccfg_CfgSvc_GetResourceValues_ldx_ ((IDL_unsigned_long) 9)
/*
 * Operation synopsis for operation 'odbccfg_CfgSvc_GetResourceValues'
 */
#define odbccfg_CfgSvc_GetResourceValues_osy_ ((IDL_long) -1271159434)
/*
 * Asynchronous method function pointer type for
 * operation 'odbccfg_CfgSvc_GetResourceValues'
 */
typedef void (*odbccfg_CfgSvc_GetResourceValues_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ CfgSvc_REQ_def KeyType
  , /* In    */ const IDL_char *KeyValue
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbccfg_CfgSvc_GetResourceValues'
 */
extern "C" void
odbccfg_CfgSvc_GetResourceValues_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ CfgSvc_REQ_def KeyType
  , /* In    */ const IDL_char *KeyValue
  );
/*
 * Set Asynchronous Method for
 * operation 'odbccfg_CfgSvc_GetResourceValues'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetResourceValues_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_GetResourceValues_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbccfg_CfgSvc_GetResourceValues'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetResourceValues_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbccfg_CfgSvc_GetResourceValues_exc_ *exception_
  , /* In    */ const RES_DESC_LIST_def *ResValueList
  , /* In    */ const ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function pointer type for
 * operation'odbccfg_CfgSvc_GetResourceValues'
 */
typedef void (*odbccfg_CfgSvc_GetResourceValues_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_GetResourceValues_exc_ *exception_
  , /* In    */ CfgSvc_REQ_def KeyType
  , /* In    */ const IDL_char *KeyValue
  , /* Out   */ RES_DESC_LIST_def *ResValueList
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function prototype for
 * operation 'odbccfg_CfgSvc_GetResourceValues'
 */
extern "C" void
odbccfg_CfgSvc_GetResourceValues_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_GetResourceValues_exc_ *exception_
  , /* In    */ CfgSvc_REQ_def KeyType
  , /* In    */ const IDL_char *KeyValue
  , /* Out   */ RES_DESC_LIST_def *ResValueList
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Set Synchronous method for
 * operation 'odbccfg_CfgSvc_GetResourceValues'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetResourceValues_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_GetResourceValues_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbccfg_CfgSvc_GetResourceValues'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetResourceValues_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_GetResourceValues_smt_ method_
  );

/************************************************
 * Operation 'odbccfg_CfgSvc_SetResourceValues' *
 ************************************************/

/*
 * Exception number constants for
 * operation 'odbccfg_CfgSvc_SetResourceValues'
 */
#define odbccfg_CfgSvc_SetResourceValues_ParamError_exn_ 1
#define odbccfg_CfgSvc_SetResourceValues_SQLError_exn_ 2
#define odbccfg_CfgSvc_SetResourceValues_SQLNoDataFound_exn_ 3
/*
 * Exception union for
 * operation 'odbccfg_CfgSvc_SetResourceValues'
 */
struct odbccfg_CfgSvc_SetResourceValues_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbccfg_CfgSvc_ParamError ParamError;
    odbccfg_CfgSvc_SQLError SQLError;
  } u;
};
/*
 * Local index for operation 'odbccfg_CfgSvc_SetResourceValues'
 */
#define odbccfg_CfgSvc_SetResourceValues_ldx_ ((IDL_unsigned_long) 10)
/*
 * Operation synopsis for operation 'odbccfg_CfgSvc_SetResourceValues'
 */
#define odbccfg_CfgSvc_SetResourceValues_osy_ ((IDL_long) 2022296519)
/*
 * Asynchronous method function pointer type for
 * operation 'odbccfg_CfgSvc_SetResourceValues'
 */
typedef void (*odbccfg_CfgSvc_SetResourceValues_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ CfgSvc_REQ_def KeyType
  , /* In    */ const IDL_char *KeyValue
  , /* In    */ const RES_DESC_LIST_def *ResValueList
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbccfg_CfgSvc_SetResourceValues'
 */
extern "C" void
odbccfg_CfgSvc_SetResourceValues_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ CfgSvc_REQ_def KeyType
  , /* In    */ const IDL_char *KeyValue
  , /* In    */ const RES_DESC_LIST_def *ResValueList
  );
/*
 * Set Asynchronous Method for
 * operation 'odbccfg_CfgSvc_SetResourceValues'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SetResourceValues_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_SetResourceValues_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbccfg_CfgSvc_SetResourceValues'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SetResourceValues_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbccfg_CfgSvc_SetResourceValues_exc_ *exception_
  , /* In    */ const ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function pointer type for
 * operation'odbccfg_CfgSvc_SetResourceValues'
 */
typedef void (*odbccfg_CfgSvc_SetResourceValues_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_SetResourceValues_exc_ *exception_
  , /* In    */ CfgSvc_REQ_def KeyType
  , /* In    */ const IDL_char *KeyValue
  , /* In    */ const RES_DESC_LIST_def *ResValueList
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function prototype for
 * operation 'odbccfg_CfgSvc_SetResourceValues'
 */
extern "C" void
odbccfg_CfgSvc_SetResourceValues_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_SetResourceValues_exc_ *exception_
  , /* In    */ CfgSvc_REQ_def KeyType
  , /* In    */ const IDL_char *KeyValue
  , /* In    */ const RES_DESC_LIST_def *ResValueList
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Set Synchronous method for
 * operation 'odbccfg_CfgSvc_SetResourceValues'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SetResourceValues_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_SetResourceValues_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbccfg_CfgSvc_SetResourceValues'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SetResourceValues_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_SetResourceValues_smt_ method_
  );

/***************************************************
 * Operation 'odbccfg_CfgSvc_GetEnvironmentValues' *
 ***************************************************/

/*
 * Exception number constants for
 * operation 'odbccfg_CfgSvc_GetEnvironmentValues'
 */
#define odbccfg_CfgSvc_GetEnvironmentValues_ParamError_exn_ 1
#define odbccfg_CfgSvc_GetEnvironmentValues_SQLError_exn_ 2
#define odbccfg_CfgSvc_GetEnvironmentValues_SQLNoDataFound_exn_ 3
/*
 * Exception union for
 * operation 'odbccfg_CfgSvc_GetEnvironmentValues'
 */
struct odbccfg_CfgSvc_GetEnvironmentValues_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbccfg_CfgSvc_ParamError ParamError;
    odbccfg_CfgSvc_SQLError SQLError;
  } u;
};
/*
 * Local index for operation 'odbccfg_CfgSvc_GetEnvironmentValues'
 */
#define odbccfg_CfgSvc_GetEnvironmentValues_ldx_ ((IDL_unsigned_long) 11)
/*
 * Operation synopsis for operation 'odbccfg_CfgSvc_GetEnvironmentValues'
 */
#define odbccfg_CfgSvc_GetEnvironmentValues_osy_ ((IDL_long) 1883882712)
/*
 * Asynchronous method function pointer type for
 * operation 'odbccfg_CfgSvc_GetEnvironmentValues'
 */
typedef void (*odbccfg_CfgSvc_GetEnvironmentValues_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ CfgSvc_REQ_def KeyType
  , /* In    */ const IDL_char *KeyValue
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbccfg_CfgSvc_GetEnvironmentValues'
 */
extern "C" void
odbccfg_CfgSvc_GetEnvironmentValues_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ CfgSvc_REQ_def KeyType
  , /* In    */ const IDL_char *KeyValue
  );
/*
 * Set Asynchronous Method for
 * operation 'odbccfg_CfgSvc_GetEnvironmentValues'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetEnvironmentValues_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_GetEnvironmentValues_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbccfg_CfgSvc_GetEnvironmentValues'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetEnvironmentValues_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbccfg_CfgSvc_GetEnvironmentValues_exc_ *exception_
  , /* In    */ const ENV_DESC_LIST_def *EnvValueList
  , /* In    */ const ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function pointer type for
 * operation'odbccfg_CfgSvc_GetEnvironmentValues'
 */
typedef void (*odbccfg_CfgSvc_GetEnvironmentValues_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_GetEnvironmentValues_exc_ *exception_
  , /* In    */ CfgSvc_REQ_def KeyType
  , /* In    */ const IDL_char *KeyValue
  , /* Out   */ ENV_DESC_LIST_def *EnvValueList
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function prototype for
 * operation 'odbccfg_CfgSvc_GetEnvironmentValues'
 */
extern "C" void
odbccfg_CfgSvc_GetEnvironmentValues_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_GetEnvironmentValues_exc_ *exception_
  , /* In    */ CfgSvc_REQ_def KeyType
  , /* In    */ const IDL_char *KeyValue
  , /* Out   */ ENV_DESC_LIST_def *EnvValueList
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Set Synchronous method for
 * operation 'odbccfg_CfgSvc_GetEnvironmentValues'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetEnvironmentValues_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_GetEnvironmentValues_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbccfg_CfgSvc_GetEnvironmentValues'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetEnvironmentValues_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_GetEnvironmentValues_smt_ method_
  );

/***************************************************
 * Operation 'odbccfg_CfgSvc_SetEnvironmentValues' *
 ***************************************************/

/*
 * Exception number constants for
 * operation 'odbccfg_CfgSvc_SetEnvironmentValues'
 */
#define odbccfg_CfgSvc_SetEnvironmentValues_ParamError_exn_ 1
#define odbccfg_CfgSvc_SetEnvironmentValues_SQLError_exn_ 2
#define odbccfg_CfgSvc_SetEnvironmentValues_SQLNoDataFound_exn_ 3
/*
 * Exception union for
 * operation 'odbccfg_CfgSvc_SetEnvironmentValues'
 */
struct odbccfg_CfgSvc_SetEnvironmentValues_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbccfg_CfgSvc_ParamError ParamError;
    odbccfg_CfgSvc_SQLError SQLError;
  } u;
};
/*
 * Local index for operation 'odbccfg_CfgSvc_SetEnvironmentValues'
 */
#define odbccfg_CfgSvc_SetEnvironmentValues_ldx_ ((IDL_unsigned_long) 12)
/*
 * Operation synopsis for operation 'odbccfg_CfgSvc_SetEnvironmentValues'
 */
#define odbccfg_CfgSvc_SetEnvironmentValues_osy_ ((IDL_long) -1143515871)
/*
 * Asynchronous method function pointer type for
 * operation 'odbccfg_CfgSvc_SetEnvironmentValues'
 */
typedef void (*odbccfg_CfgSvc_SetEnvironmentValues_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ CfgSvc_REQ_def KeyType
  , /* In    */ const IDL_char *KeyValue
  , /* In    */ const ENV_DESC_LIST_def *EnvValueList
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbccfg_CfgSvc_SetEnvironmentValues'
 */
extern "C" void
odbccfg_CfgSvc_SetEnvironmentValues_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ CfgSvc_REQ_def KeyType
  , /* In    */ const IDL_char *KeyValue
  , /* In    */ const ENV_DESC_LIST_def *EnvValueList
  );
/*
 * Set Asynchronous Method for
 * operation 'odbccfg_CfgSvc_SetEnvironmentValues'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SetEnvironmentValues_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_SetEnvironmentValues_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbccfg_CfgSvc_SetEnvironmentValues'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SetEnvironmentValues_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbccfg_CfgSvc_SetEnvironmentValues_exc_ *exception_
  , /* In    */ const ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function pointer type for
 * operation'odbccfg_CfgSvc_SetEnvironmentValues'
 */
typedef void (*odbccfg_CfgSvc_SetEnvironmentValues_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_SetEnvironmentValues_exc_ *exception_
  , /* In    */ CfgSvc_REQ_def KeyType
  , /* In    */ const IDL_char *KeyValue
  , /* In    */ const ENV_DESC_LIST_def *EnvValueList
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function prototype for
 * operation 'odbccfg_CfgSvc_SetEnvironmentValues'
 */
extern "C" void
odbccfg_CfgSvc_SetEnvironmentValues_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_SetEnvironmentValues_exc_ *exception_
  , /* In    */ CfgSvc_REQ_def KeyType
  , /* In    */ const IDL_char *KeyValue
  , /* In    */ const ENV_DESC_LIST_def *EnvValueList
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Set Synchronous method for
 * operation 'odbccfg_CfgSvc_SetEnvironmentValues'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SetEnvironmentValues_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_SetEnvironmentValues_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbccfg_CfgSvc_SetEnvironmentValues'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SetEnvironmentValues_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_SetEnvironmentValues_smt_ method_
  );

/*****************************************************
 * Operation 'odbccfg_CfgSvc_GetStartupConfigValues' *
 *****************************************************/

/*
 * Exception number constants for
 * operation 'odbccfg_CfgSvc_GetStartupConfigValues'
 */
#define odbccfg_CfgSvc_GetStartupConfigValues_ParamError_exn_ 1
#define odbccfg_CfgSvc_GetStartupConfigValues_SQLError_exn_ 2
#define odbccfg_CfgSvc_GetStartupConfigValues_SQLNoDataFound_exn_ 3
/*
 * Exception union for
 * operation 'odbccfg_CfgSvc_GetStartupConfigValues'
 */
struct odbccfg_CfgSvc_GetStartupConfigValues_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbccfg_CfgSvc_ParamError ParamError;
    odbccfg_CfgSvc_SQLError SQLError;
  } u;
};
/*
 * Local index for operation 'odbccfg_CfgSvc_GetStartupConfigValues'
 */
#define odbccfg_CfgSvc_GetStartupConfigValues_ldx_ ((IDL_unsigned_long) 13)
/*
 * Operation synopsis for operation 'odbccfg_CfgSvc_GetStartupConfigValues'
 */
#define odbccfg_CfgSvc_GetStartupConfigValues_osy_ ((IDL_long) -891401862)
/*
 * Asynchronous method function pointer type for
 * operation 'odbccfg_CfgSvc_GetStartupConfigValues'
 */
typedef void (*odbccfg_CfgSvc_GetStartupConfigValues_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbccfg_CfgSvc_GetStartupConfigValues'
 */
extern "C" void
odbccfg_CfgSvc_GetStartupConfigValues_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  );
/*
 * Set Asynchronous Method for
 * operation 'odbccfg_CfgSvc_GetStartupConfigValues'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetStartupConfigValues_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_GetStartupConfigValues_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbccfg_CfgSvc_GetStartupConfigValues'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetStartupConfigValues_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbccfg_CfgSvc_GetStartupConfigValues_exc_ *exception_
  , /* In    */ IDL_short serviceStatus
  , /* In    */ IDL_long serviceStatusChangeTime
  , /* In    */ IDL_long isoMapping
  , /* In    */ const DATASOURCE_CFG_LIST_def *DSList
  , /* In    */ const ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function pointer type for
 * operation'odbccfg_CfgSvc_GetStartupConfigValues'
 */
typedef void (*odbccfg_CfgSvc_GetStartupConfigValues_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_GetStartupConfigValues_exc_ *exception_
  , /* Out   */ IDL_short *serviceStatus
  , /* Out   */ IDL_long *serviceStatusChangeTime
  , /* Out   */ IDL_long *isoMapping
  , /* Out   */ DATASOURCE_CFG_LIST_def *DSList
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function prototype for
 * operation 'odbccfg_CfgSvc_GetStartupConfigValues'
 */
extern "C" void
odbccfg_CfgSvc_GetStartupConfigValues_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_GetStartupConfigValues_exc_ *exception_
  , /* Out   */ IDL_short *serviceStatus
  , /* Out   */ IDL_long *serviceStatusChangeTime
  , /* Out   */ IDL_long *isoMapping
  , /* Out   */ DATASOURCE_CFG_LIST_def *DSList
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Set Synchronous method for
 * operation 'odbccfg_CfgSvc_GetStartupConfigValues'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetStartupConfigValues_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_GetStartupConfigValues_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbccfg_CfgSvc_GetStartupConfigValues'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetStartupConfigValues_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_GetStartupConfigValues_smt_ method_
  );

/**************************************************
 * Operation 'odbccfg_CfgSvc_GetDataSourceValues' *
 **************************************************/

/*
 * Exception number constants for
 * operation 'odbccfg_CfgSvc_GetDataSourceValues'
 */
#define odbccfg_CfgSvc_GetDataSourceValues_ParamError_exn_ 1
#define odbccfg_CfgSvc_GetDataSourceValues_SQLError_exn_ 2
#define odbccfg_CfgSvc_GetDataSourceValues_SQLNoDataFound_exn_ 3
/*
 * Exception union for
 * operation 'odbccfg_CfgSvc_GetDataSourceValues'
 */
struct odbccfg_CfgSvc_GetDataSourceValues_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbccfg_CfgSvc_ParamError ParamError;
    odbccfg_CfgSvc_SQLError SQLError;
  } u;
};
/*
 * Local index for operation 'odbccfg_CfgSvc_GetDataSourceValues'
 */
#define odbccfg_CfgSvc_GetDataSourceValues_ldx_ ((IDL_unsigned_long) 14)
/*
 * Operation synopsis for operation 'odbccfg_CfgSvc_GetDataSourceValues'
 */
#define odbccfg_CfgSvc_GetDataSourceValues_osy_ ((IDL_long) -1168311702)
/*
 * Asynchronous method function pointer type for
 * operation 'odbccfg_CfgSvc_GetDataSourceValues'
 */
typedef void (*odbccfg_CfgSvc_GetDataSourceValues_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *DSName
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbccfg_CfgSvc_GetDataSourceValues'
 */
extern "C" void
odbccfg_CfgSvc_GetDataSourceValues_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *DSName
  );
/*
 * Set Asynchronous Method for
 * operation 'odbccfg_CfgSvc_GetDataSourceValues'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetDataSourceValues_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_GetDataSourceValues_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbccfg_CfgSvc_GetDataSourceValues'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetDataSourceValues_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbccfg_CfgSvc_GetDataSourceValues_exc_ *exception_
  , /* In    */ const DATASOURCE_CFG_def *DSValues
  , /* In    */ const ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function pointer type for
 * operation'odbccfg_CfgSvc_GetDataSourceValues'
 */
typedef void (*odbccfg_CfgSvc_GetDataSourceValues_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_GetDataSourceValues_exc_ *exception_
  , /* In    */ const IDL_char *DSName
  , /* Out   */ DATASOURCE_CFG_def *DSValues
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function prototype for
 * operation 'odbccfg_CfgSvc_GetDataSourceValues'
 */
extern "C" void
odbccfg_CfgSvc_GetDataSourceValues_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_GetDataSourceValues_exc_ *exception_
  , /* In    */ const IDL_char *DSName
  , /* Out   */ DATASOURCE_CFG_def *DSValues
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Set Synchronous method for
 * operation 'odbccfg_CfgSvc_GetDataSourceValues'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetDataSourceValues_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_GetDataSourceValues_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbccfg_CfgSvc_GetDataSourceValues'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GetDataSourceValues_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_GetDataSourceValues_smt_ method_
  );

/******************************************
 * Operation 'odbccfg_CfgSvc_SetDSStatus' *
 ******************************************/

/*
 * Exception number constants for
 * operation 'odbccfg_CfgSvc_SetDSStatus'
 */
#define odbccfg_CfgSvc_SetDSStatus_ParamError_exn_ 1
#define odbccfg_CfgSvc_SetDSStatus_SQLError_exn_ 2
#define odbccfg_CfgSvc_SetDSStatus_SQLNoDataFound_exn_ 3
/*
 * Exception union for
 * operation 'odbccfg_CfgSvc_SetDSStatus'
 */
struct odbccfg_CfgSvc_SetDSStatus_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbccfg_CfgSvc_ParamError ParamError;
    odbccfg_CfgSvc_SQLError SQLError;
  } u;
};
/*
 * Local index for operation 'odbccfg_CfgSvc_SetDSStatus'
 */
#define odbccfg_CfgSvc_SetDSStatus_ldx_ ((IDL_unsigned_long) 15)
/*
 * Operation synopsis for operation 'odbccfg_CfgSvc_SetDSStatus'
 */
#define odbccfg_CfgSvc_SetDSStatus_osy_ ((IDL_long) -1540078431)
/*
 * Asynchronous method function pointer type for
 * operation 'odbccfg_CfgSvc_SetDSStatus'
 */
typedef void (*odbccfg_CfgSvc_SetDSStatus_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *DSNm
  , /* In    */ IDL_short status
  , /* In    */ const IDL_char *statusChangedTime
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbccfg_CfgSvc_SetDSStatus'
 */
extern "C" void
odbccfg_CfgSvc_SetDSStatus_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const IDL_char *DSNm
  , /* In    */ IDL_short status
  , /* In    */ const IDL_char *statusChangedTime
  );
/*
 * Set Asynchronous Method for
 * operation 'odbccfg_CfgSvc_SetDSStatus'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SetDSStatus_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_SetDSStatus_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbccfg_CfgSvc_SetDSStatus'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SetDSStatus_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbccfg_CfgSvc_SetDSStatus_exc_ *exception_
  , /* In    */ const ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function pointer type for
 * operation'odbccfg_CfgSvc_SetDSStatus'
 */
typedef void (*odbccfg_CfgSvc_SetDSStatus_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_SetDSStatus_exc_ *exception_
  , /* In    */ const IDL_char *DSNm
  , /* In    */ IDL_short status
  , /* In    */ const IDL_char *statusChangedTime
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function prototype for
 * operation 'odbccfg_CfgSvc_SetDSStatus'
 */
extern "C" void
odbccfg_CfgSvc_SetDSStatus_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_SetDSStatus_exc_ *exception_
  , /* In    */ const IDL_char *DSNm
  , /* In    */ IDL_short status
  , /* In    */ const IDL_char *statusChangedTime
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Set Synchronous method for
 * operation 'odbccfg_CfgSvc_SetDSStatus'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SetDSStatus_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_SetDSStatus_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbccfg_CfgSvc_SetDSStatus'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SetDSStatus_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_SetDSStatus_smt_ method_
  );

/******************************************
 * Operation 'odbccfg_CfgSvc_SetASStatus' *
 ******************************************/

/*
 * Exception number constants for
 * operation 'odbccfg_CfgSvc_SetASStatus'
 */
#define odbccfg_CfgSvc_SetASStatus_ParamError_exn_ 1
#define odbccfg_CfgSvc_SetASStatus_SQLError_exn_ 2
#define odbccfg_CfgSvc_SetASStatus_SQLNoDataFound_exn_ 3
/*
 * Exception union for
 * operation 'odbccfg_CfgSvc_SetASStatus'
 */
struct odbccfg_CfgSvc_SetASStatus_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbccfg_CfgSvc_ParamError ParamError;
    odbccfg_CfgSvc_SQLError SQLError;
  } u;
};
/*
 * Local index for operation 'odbccfg_CfgSvc_SetASStatus'
 */
#define odbccfg_CfgSvc_SetASStatus_ldx_ ((IDL_unsigned_long) 16)
/*
 * Operation synopsis for operation 'odbccfg_CfgSvc_SetASStatus'
 */
#define odbccfg_CfgSvc_SetASStatus_osy_ ((IDL_long) 1262533997)
/*
 * Asynchronous method function pointer type for
 * operation 'odbccfg_CfgSvc_SetASStatus'
 */
typedef void (*odbccfg_CfgSvc_SetASStatus_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ IDL_short status
  , /* In    */ const IDL_char *statusChangedTime
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbccfg_CfgSvc_SetASStatus'
 */
extern "C" void
odbccfg_CfgSvc_SetASStatus_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ IDL_short status
  , /* In    */ const IDL_char *statusChangedTime
  );
/*
 * Set Asynchronous Method for
 * operation 'odbccfg_CfgSvc_SetASStatus'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SetASStatus_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_SetASStatus_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbccfg_CfgSvc_SetASStatus'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SetASStatus_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbccfg_CfgSvc_SetASStatus_exc_ *exception_
  , /* In    */ const ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function pointer type for
 * operation'odbccfg_CfgSvc_SetASStatus'
 */
typedef void (*odbccfg_CfgSvc_SetASStatus_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_SetASStatus_exc_ *exception_
  , /* In    */ IDL_short status
  , /* In    */ const IDL_char *statusChangedTime
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function prototype for
 * operation 'odbccfg_CfgSvc_SetASStatus'
 */
extern "C" void
odbccfg_CfgSvc_SetASStatus_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_SetASStatus_exc_ *exception_
  , /* In    */ IDL_short status
  , /* In    */ const IDL_char *statusChangedTime
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Set Synchronous method for
 * operation 'odbccfg_CfgSvc_SetASStatus'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SetASStatus_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_SetASStatus_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbccfg_CfgSvc_SetASStatus'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SetASStatus_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_SetASStatus_smt_ method_
  );

/**********************************************************
 * Operation 'odbccfg_CfgSvc_CreateConfigurationDatabase' *
 **********************************************************/

/*
 * Exception number constants for
 * operation 'odbccfg_CfgSvc_CreateConfigurationDatabase'
 */
#define odbccfg_CfgSvc_CreateConfigurationDatabase_ParamError_exn_ 1
#define odbccfg_CfgSvc_CreateConfigurationDatabase_SQLError_exn_ 2
#define odbccfg_CfgSvc_CreateConfigurationDatabase_SQLInvalidHandle_exn_ 3
#define odbccfg_CfgSvc_CreateConfigurationDatabase_DatabaseFound_exn_ 4
/*
 * Exception union for
 * operation 'odbccfg_CfgSvc_CreateConfigurationDatabase'
 */
struct odbccfg_CfgSvc_CreateConfigurationDatabase_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbccfg_CfgSvc_ParamError ParamError;
    odbccfg_CfgSvc_SQLError SQLError;
  } u;
};
/*
 * Local index for operation 'odbccfg_CfgSvc_CreateConfigurationDatabase'
 */
#define odbccfg_CfgSvc_CreateConfigurationDatabase_ldx_ ((IDL_unsigned_long) 17)
/*
 * Operation synopsis for operation 'odbccfg_CfgSvc_CreateConfigurationDatabase'
 */
#define odbccfg_CfgSvc_CreateConfigurationDatabase_osy_ ((IDL_long) -2038313241)
/*
 * Asynchronous method function pointer type for
 * operation 'odbccfg_CfgSvc_CreateConfigurationDatabase'
 */
typedef void (*odbccfg_CfgSvc_CreateConfigurationDatabase_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ IDL_long DatabaseVersion
  , /* In    */ IDL_string sqlVolumeLocationNm
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbccfg_CfgSvc_CreateConfigurationDatabase'
 */
extern "C" void
odbccfg_CfgSvc_CreateConfigurationDatabase_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ IDL_long DatabaseVersion
  , /* In    */ IDL_string sqlVolumeLocationNm
  );
/*
 * Set Asynchronous Method for
 * operation 'odbccfg_CfgSvc_CreateConfigurationDatabase'
 */
extern "C" CEE_status
odbccfg_CfgSvc_CreateConfigurationDatabase_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_CreateConfigurationDatabase_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbccfg_CfgSvc_CreateConfigurationDatabase'
 */
extern "C" CEE_status
odbccfg_CfgSvc_CreateConfigurationDatabase_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbccfg_CfgSvc_CreateConfigurationDatabase_exc_ *exception_
  , /* In    */ const ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function pointer type for
 * operation'odbccfg_CfgSvc_CreateConfigurationDatabase'
 */
typedef void (*odbccfg_CfgSvc_CreateConfigurationDatabase_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_CreateConfigurationDatabase_exc_ *exception_
  , /* In    */ IDL_long DatabaseVersion
  , /* In    */ IDL_string sqlVolumeLocationNm
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function prototype for
 * operation 'odbccfg_CfgSvc_CreateConfigurationDatabase'
 */
extern "C" void
odbccfg_CfgSvc_CreateConfigurationDatabase_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_CreateConfigurationDatabase_exc_ *exception_
  , /* In    */ IDL_long DatabaseVersion
  , /* In    */ IDL_string sqlVolumeLocationNm
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Set Synchronous method for
 * operation 'odbccfg_CfgSvc_CreateConfigurationDatabase'
 */
extern "C" CEE_status
odbccfg_CfgSvc_CreateConfigurationDatabase_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_CreateConfigurationDatabase_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbccfg_CfgSvc_CreateConfigurationDatabase'
 */
extern "C" CEE_status
odbccfg_CfgSvc_CreateConfigurationDatabase_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_CreateConfigurationDatabase_smt_ method_
  );

/**************************************************
 * Operation 'odbccfg_CfgSvc_CreateDatatypeTable' *
 **************************************************/

/*
 * Exception number constants for
 * operation 'odbccfg_CfgSvc_CreateDatatypeTable'
 */
#define odbccfg_CfgSvc_CreateDatatypeTable_ParamError_exn_ 1
#define odbccfg_CfgSvc_CreateDatatypeTable_SQLError_exn_ 2
#define odbccfg_CfgSvc_CreateDatatypeTable_SQLInvalidHandle_exn_ 3
#define odbccfg_CfgSvc_CreateDatatypeTable_DatabaseFound_exn_ 4
/*
 * Exception union for
 * operation 'odbccfg_CfgSvc_CreateDatatypeTable'
 */
struct odbccfg_CfgSvc_CreateDatatypeTable_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbccfg_CfgSvc_ParamError ParamError;
    odbccfg_CfgSvc_SQLError SQLError;
  } u;
};
/*
 * Local index for operation 'odbccfg_CfgSvc_CreateDatatypeTable'
 */
#define odbccfg_CfgSvc_CreateDatatypeTable_ldx_ ((IDL_unsigned_long) 18)
/*
 * Operation synopsis for operation 'odbccfg_CfgSvc_CreateDatatypeTable'
 */
#define odbccfg_CfgSvc_CreateDatatypeTable_osy_ ((IDL_long) 2084567037)
/*
 * Asynchronous method function pointer type for
 * operation 'odbccfg_CfgSvc_CreateDatatypeTable'
 */
typedef void (*odbccfg_CfgSvc_CreateDatatypeTable_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ IDL_long DatatypeTableVersion
  , /* In    */ IDL_string sqlVolumeLocationNm
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbccfg_CfgSvc_CreateDatatypeTable'
 */
extern "C" void
odbccfg_CfgSvc_CreateDatatypeTable_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ IDL_long DatatypeTableVersion
  , /* In    */ IDL_string sqlVolumeLocationNm
  );
/*
 * Set Asynchronous Method for
 * operation 'odbccfg_CfgSvc_CreateDatatypeTable'
 */
extern "C" CEE_status
odbccfg_CfgSvc_CreateDatatypeTable_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_CreateDatatypeTable_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbccfg_CfgSvc_CreateDatatypeTable'
 */
extern "C" CEE_status
odbccfg_CfgSvc_CreateDatatypeTable_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbccfg_CfgSvc_CreateDatatypeTable_exc_ *exception_
  , /* In    */ const ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function pointer type for
 * operation'odbccfg_CfgSvc_CreateDatatypeTable'
 */
typedef void (*odbccfg_CfgSvc_CreateDatatypeTable_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_CreateDatatypeTable_exc_ *exception_
  , /* In    */ IDL_long DatatypeTableVersion
  , /* In    */ IDL_string sqlVolumeLocationNm
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function prototype for
 * operation 'odbccfg_CfgSvc_CreateDatatypeTable'
 */
extern "C" void
odbccfg_CfgSvc_CreateDatatypeTable_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_CreateDatatypeTable_exc_ *exception_
  , /* In    */ IDL_long DatatypeTableVersion
  , /* In    */ IDL_string sqlVolumeLocationNm
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Set Synchronous method for
 * operation 'odbccfg_CfgSvc_CreateDatatypeTable'
 */
extern "C" CEE_status
odbccfg_CfgSvc_CreateDatatypeTable_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_CreateDatatypeTable_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbccfg_CfgSvc_CreateDatatypeTable'
 */
extern "C" CEE_status
odbccfg_CfgSvc_CreateDatatypeTable_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_CreateDatatypeTable_smt_ method_
  );

/********************************************************
 * Operation 'odbccfg_CfgSvc_DropConfigurationDatabase' *
 ********************************************************/

/*
 * Exception number constants for
 * operation 'odbccfg_CfgSvc_DropConfigurationDatabase'
 */
#define odbccfg_CfgSvc_DropConfigurationDatabase_ParamError_exn_ 1
#define odbccfg_CfgSvc_DropConfigurationDatabase_SQLError_exn_ 2
#define odbccfg_CfgSvc_DropConfigurationDatabase_SQLInvalidHandle_exn_ 3
#define odbccfg_CfgSvc_DropConfigurationDatabase_DatabaseNotFound_exn_ 4
/*
 * Exception union for
 * operation 'odbccfg_CfgSvc_DropConfigurationDatabase'
 */
struct odbccfg_CfgSvc_DropConfigurationDatabase_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbccfg_CfgSvc_ParamError ParamError;
    odbccfg_CfgSvc_SQLError SQLError;
  } u;
};
/*
 * Local index for operation 'odbccfg_CfgSvc_DropConfigurationDatabase'
 */
#define odbccfg_CfgSvc_DropConfigurationDatabase_ldx_ ((IDL_unsigned_long) 19)
/*
 * Operation synopsis for operation 'odbccfg_CfgSvc_DropConfigurationDatabase'
 */
#define odbccfg_CfgSvc_DropConfigurationDatabase_osy_ ((IDL_long) -1760006867)
/*
 * Asynchronous method function pointer type for
 * operation 'odbccfg_CfgSvc_DropConfigurationDatabase'
 */
typedef void (*odbccfg_CfgSvc_DropConfigurationDatabase_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbccfg_CfgSvc_DropConfigurationDatabase'
 */
extern "C" void
odbccfg_CfgSvc_DropConfigurationDatabase_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  );
/*
 * Set Asynchronous Method for
 * operation 'odbccfg_CfgSvc_DropConfigurationDatabase'
 */
extern "C" CEE_status
odbccfg_CfgSvc_DropConfigurationDatabase_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_DropConfigurationDatabase_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbccfg_CfgSvc_DropConfigurationDatabase'
 */
extern "C" CEE_status
odbccfg_CfgSvc_DropConfigurationDatabase_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbccfg_CfgSvc_DropConfigurationDatabase_exc_ *exception_
  , /* In    */ const ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function pointer type for
 * operation'odbccfg_CfgSvc_DropConfigurationDatabase'
 */
typedef void (*odbccfg_CfgSvc_DropConfigurationDatabase_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_DropConfigurationDatabase_exc_ *exception_
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function prototype for
 * operation 'odbccfg_CfgSvc_DropConfigurationDatabase'
 */
extern "C" void
odbccfg_CfgSvc_DropConfigurationDatabase_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_DropConfigurationDatabase_exc_ *exception_
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Set Synchronous method for
 * operation 'odbccfg_CfgSvc_DropConfigurationDatabase'
 */
extern "C" CEE_status
odbccfg_CfgSvc_DropConfigurationDatabase_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_DropConfigurationDatabase_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbccfg_CfgSvc_DropConfigurationDatabase'
 */
extern "C" CEE_status
odbccfg_CfgSvc_DropConfigurationDatabase_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_DropConfigurationDatabase_smt_ method_
  );

/************************************************
 * Operation 'odbccfg_CfgSvc_DropDatatypeTable' *
 ************************************************/

/*
 * Exception number constants for
 * operation 'odbccfg_CfgSvc_DropDatatypeTable'
 */
#define odbccfg_CfgSvc_DropDatatypeTable_ParamError_exn_ 1
#define odbccfg_CfgSvc_DropDatatypeTable_SQLError_exn_ 2
#define odbccfg_CfgSvc_DropDatatypeTable_SQLInvalidHandle_exn_ 3
#define odbccfg_CfgSvc_DropDatatypeTable_DatabaseNotFound_exn_ 4
/*
 * Exception union for
 * operation 'odbccfg_CfgSvc_DropDatatypeTable'
 */
struct odbccfg_CfgSvc_DropDatatypeTable_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbccfg_CfgSvc_ParamError ParamError;
    odbccfg_CfgSvc_SQLError SQLError;
  } u;
};
/*
 * Local index for operation 'odbccfg_CfgSvc_DropDatatypeTable'
 */
#define odbccfg_CfgSvc_DropDatatypeTable_ldx_ ((IDL_unsigned_long) 20)
/*
 * Operation synopsis for operation 'odbccfg_CfgSvc_DropDatatypeTable'
 */
#define odbccfg_CfgSvc_DropDatatypeTable_osy_ ((IDL_long) -1487785575)
/*
 * Asynchronous method function pointer type for
 * operation 'odbccfg_CfgSvc_DropDatatypeTable'
 */
typedef void (*odbccfg_CfgSvc_DropDatatypeTable_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbccfg_CfgSvc_DropDatatypeTable'
 */
extern "C" void
odbccfg_CfgSvc_DropDatatypeTable_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  );
/*
 * Set Asynchronous Method for
 * operation 'odbccfg_CfgSvc_DropDatatypeTable'
 */
extern "C" CEE_status
odbccfg_CfgSvc_DropDatatypeTable_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_DropDatatypeTable_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbccfg_CfgSvc_DropDatatypeTable'
 */
extern "C" CEE_status
odbccfg_CfgSvc_DropDatatypeTable_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbccfg_CfgSvc_DropDatatypeTable_exc_ *exception_
  , /* In    */ const ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function pointer type for
 * operation'odbccfg_CfgSvc_DropDatatypeTable'
 */
typedef void (*odbccfg_CfgSvc_DropDatatypeTable_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_DropDatatypeTable_exc_ *exception_
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Synchronous method function prototype for
 * operation 'odbccfg_CfgSvc_DropDatatypeTable'
 */
extern "C" void
odbccfg_CfgSvc_DropDatatypeTable_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_DropDatatypeTable_exc_ *exception_
  , /* Out   */ ERROR_DESC_LIST_def *sqlWarning
  );
/*
 * Set Synchronous method for
 * operation 'odbccfg_CfgSvc_DropDatatypeTable'
 */
extern "C" CEE_status
odbccfg_CfgSvc_DropDatatypeTable_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_DropDatatypeTable_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbccfg_CfgSvc_DropDatatypeTable'
 */
extern "C" CEE_status
odbccfg_CfgSvc_DropDatatypeTable_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_DropDatatypeTable_smt_ method_
  );

/*******************************************
 * Operation 'odbccfg_CfgSvc_GeneralParam' *
 *******************************************/

/*
 * Exception number constants for
 * operation 'odbccfg_CfgSvc_GeneralParam'
 */
#define odbccfg_CfgSvc_GeneralParam_ParamError_exn_ 1
/*
 * Exception union for
 * operation 'odbccfg_CfgSvc_GeneralParam'
 */
struct odbccfg_CfgSvc_GeneralParam_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
  union {
    odbccfg_CfgSvc_ParamError ParamError;
  } u;
};
/*
 * Local index for operation 'odbccfg_CfgSvc_GeneralParam'
 */
#define odbccfg_CfgSvc_GeneralParam_ldx_ ((IDL_unsigned_long) 21)
/*
 * Operation synopsis for operation 'odbccfg_CfgSvc_GeneralParam'
 */
#define odbccfg_CfgSvc_GeneralParam_osy_ ((IDL_long) 54591643)
/*
 * Asynchronous method function pointer type for
 * operation 'odbccfg_CfgSvc_GeneralParam'
 */
typedef void (*odbccfg_CfgSvc_GeneralParam_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const GEN_ParamList_def *paramList
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbccfg_CfgSvc_GeneralParam'
 */
extern "C" void
odbccfg_CfgSvc_GeneralParam_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const GEN_ParamList_def *paramList
  );
/*
 * Set Asynchronous Method for
 * operation 'odbccfg_CfgSvc_GeneralParam'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GeneralParam_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_GeneralParam_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbccfg_CfgSvc_GeneralParam'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GeneralParam_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbccfg_CfgSvc_GeneralParam_exc_ *exception_
  );
/*
 * Synchronous method function pointer type for
 * operation'odbccfg_CfgSvc_GeneralParam'
 */
typedef void (*odbccfg_CfgSvc_GeneralParam_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_GeneralParam_exc_ *exception_
  , /* In    */ const GEN_ParamList_def *paramList
  );
/*
 * Synchronous method function prototype for
 * operation 'odbccfg_CfgSvc_GeneralParam'
 */
extern "C" void
odbccfg_CfgSvc_GeneralParam_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_GeneralParam_exc_ *exception_
  , /* In    */ const GEN_ParamList_def *paramList
  );
/*
 * Set Synchronous method for
 * operation 'odbccfg_CfgSvc_GeneralParam'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GeneralParam_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_GeneralParam_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbccfg_CfgSvc_GeneralParam'
 */
extern "C" CEE_status
odbccfg_CfgSvc_GeneralParam_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_GeneralParam_smt_ method_
  );

/*********************************************
 * Operation 'odbccfg_CfgSvc_StopEspOrphans' *
 *********************************************/
/*
 * Exception union for
 * operation 'odbccfg_CfgSvc_StopEspOrphans'
 */
struct odbccfg_CfgSvc_StopEspOrphans_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
};
/*
 * Local index for operation 'odbccfg_CfgSvc_StopEspOrphans'
 */
#define odbccfg_CfgSvc_StopEspOrphans_ldx_ ((IDL_unsigned_long) 22)
/*
 * Operation synopsis for operation 'odbccfg_CfgSvc_StopEspOrphans'
 */
#define odbccfg_CfgSvc_StopEspOrphans_osy_ ((IDL_long) 308947339)
/*
 * Asynchronous method function pointer type for
 * operation 'odbccfg_CfgSvc_StopEspOrphans'
 */
typedef void (*odbccfg_CfgSvc_StopEspOrphans_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const PROCESS_HANDLE_List_def *handleList
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbccfg_CfgSvc_StopEspOrphans'
 */
extern "C" void
odbccfg_CfgSvc_StopEspOrphans_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const PROCESS_HANDLE_List_def *handleList
  );
/*
 * Set Asynchronous Method for
 * operation 'odbccfg_CfgSvc_StopEspOrphans'
 */
extern "C" CEE_status
odbccfg_CfgSvc_StopEspOrphans_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_StopEspOrphans_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbccfg_CfgSvc_StopEspOrphans'
 */
extern "C" CEE_status
odbccfg_CfgSvc_StopEspOrphans_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbccfg_CfgSvc_StopEspOrphans_exc_ *exception_
  );
/*
 * Synchronous method function pointer type for
 * operation'odbccfg_CfgSvc_StopEspOrphans'
 */
typedef void (*odbccfg_CfgSvc_StopEspOrphans_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_StopEspOrphans_exc_ *exception_
  , /* In    */ const PROCESS_HANDLE_List_def *handleList
  );
/*
 * Synchronous method function prototype for
 * operation 'odbccfg_CfgSvc_StopEspOrphans'
 */
extern "C" void
odbccfg_CfgSvc_StopEspOrphans_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_StopEspOrphans_exc_ *exception_
  , /* In    */ const PROCESS_HANDLE_List_def *handleList
  );
/*
 * Set Synchronous method for
 * operation 'odbccfg_CfgSvc_StopEspOrphans'
 */
extern "C" CEE_status
odbccfg_CfgSvc_StopEspOrphans_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_StopEspOrphans_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbccfg_CfgSvc_StopEspOrphans'
 */
extern "C" CEE_status
odbccfg_CfgSvc_StopEspOrphans_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_StopEspOrphans_smt_ method_
  );

/****************************************
 * Operation 'odbccfg_CfgSvc_SQLCancel' *
 ****************************************/
/*
 * Exception union for
 * operation 'odbccfg_CfgSvc_SQLCancel'
 */
struct odbccfg_CfgSvc_SQLCancel_exc_ {
  IDL_long exception_nr;
  IDL_long exception_detail;
};
/*
 * Local index for operation 'odbccfg_CfgSvc_SQLCancel'
 */
#define odbccfg_CfgSvc_SQLCancel_ldx_ ((IDL_unsigned_long) 23)
/*
 * Operation synopsis for operation 'odbccfg_CfgSvc_SQLCancel'
 */
#define odbccfg_CfgSvc_SQLCancel_osy_ ((IDL_long) 2044471951)
/*
 * Asynchronous method function pointer type for
 * operation 'odbccfg_CfgSvc_SQLCancel'
 */
typedef void (*odbccfg_CfgSvc_SQLCancel_amt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ IDL_short segment
  , /* In    */ IDL_short cpu
  , /* In    */ IDL_short pin
  , /* In    */ IDL_long srvrApi
  , /* In    */ IDL_short requesterType
  , /* In    */ const IDL_char *requesterApplication
  , /* In    */ const IDL_char *requesterComputer
  , /* In    */ const IDL_char *requesterName
  );
/*
 * Asynchronous method function prototype for
 * operation 'odbccfg_CfgSvc_SQLCancel'
 */
extern "C" void
odbccfg_CfgSvc_SQLCancel_ame_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* In    */ IDL_short segment
  , /* In    */ IDL_short cpu
  , /* In    */ IDL_short pin
  , /* In    */ IDL_long srvrApi
  , /* In    */ IDL_short requesterType
  , /* In    */ const IDL_char *requesterApplication
  , /* In    */ const IDL_char *requesterComputer
  , /* In    */ const IDL_char *requesterName
  );
/*
 * Set Asynchronous Method for
 * operation 'odbccfg_CfgSvc_SQLCancel'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SQLCancel_ams_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_SQLCancel_amt_ method_
  );
/*
 * Asynchronous response for
 * operation 'odbccfg_CfgSvc_SQLCancel'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SQLCancel_res_(
    /* In    */ const CEE_handle_def *call_id_
  , /* In    */ const odbccfg_CfgSvc_SQLCancel_exc_ *exception_
  );
/*
 * Synchronous method function pointer type for
 * operation'odbccfg_CfgSvc_SQLCancel'
 */
typedef void (*odbccfg_CfgSvc_SQLCancel_smt_) (
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_SQLCancel_exc_ *exception_
  , /* In    */ IDL_short segment
  , /* In    */ IDL_short cpu
  , /* In    */ IDL_short pin
  , /* In    */ IDL_long srvrApi
  , /* In    */ IDL_short requesterType
  , /* In    */ const IDL_char *requesterApplication
  , /* In    */ const IDL_char *requesterComputer
  , /* In    */ const IDL_char *requesterName
  );
/*
 * Synchronous method function prototype for
 * operation 'odbccfg_CfgSvc_SQLCancel'
 */
extern "C" void
odbccfg_CfgSvc_SQLCancel_sme_(
    /* In    */ CEE_tag_def objtag_
  , /* In    */ const CEE_handle_def *call_id_
  , /* Out   */ odbccfg_CfgSvc_SQLCancel_exc_ *exception_
  , /* In    */ IDL_short segment
  , /* In    */ IDL_short cpu
  , /* In    */ IDL_short pin
  , /* In    */ IDL_long srvrApi
  , /* In    */ IDL_short requesterType
  , /* In    */ const IDL_char *requesterApplication
  , /* In    */ const IDL_char *requesterComputer
  , /* In    */ const IDL_char *requesterName
  );
/*
 * Set Synchronous method for
 * operation 'odbccfg_CfgSvc_SQLCancel'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SQLCancel_sms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_SQLCancel_smt_ method_
  );
/*
 * Set Synchronous multithreaded method for
 * operation 'odbccfg_CfgSvc_SQLCancel'
 */
extern "C" CEE_status
odbccfg_CfgSvc_SQLCancel_msms_(
    /* In    */ const CEE_handle_def *impl_
  , /* In    */ odbccfg_CfgSvc_SQLCancel_smt_ method_
  );

/*
 * CIN description of interface 'odbccfg_CfgSvc'
 */
static char odbccfg_CfgSvc_ici_[]  = {
    '!','2','2','+','I','D','L',':','o','d','b','c','c','f','g','/',
    'C','f','g','S','v','c',':','1','.','0','2','3','+','2','0','9',
    '6','7','0','3','1','0','0','+','1','7','+','G','e','t','O','b',
    'j','e','c','t','N','a','m','e','L','i','s','t','(','3','+','1',
    '0','+','O','b','j','e','c','t','T','y','p','e','>','F','1','4',
    '+','O','b','j','e','c','t','N','a','m','e','L','i','s','t','<',
    'c','0','+','d','5','1','2','+','1','0','+','s','q','l','W','a',
    'r','n','i','n','g','<','c','0','+','b','1','4','+','F','F','F',
    'd','5','+','d','0','+','F','F','d','0','+','d','0','+','d','0',
    '+','d','0','+','d','0','+','d','0','+','d','0','+','3','+','3',
    '3','+','I','D','L',':','o','d','b','c','c','f','g','/','C','f',
    'g','S','v','c','/','P','a','r','a','m','E','r','r','o','r',':',
    '1','.','0','g','1','+','d','0','+','3','1','+','I','D','L',':',
    'o','d','b','c','c','f','g','/','C','f','g','S','v','c','/','S',
    'Q','L','E','r','r','o','r',':','1','.','0','g','1','+','c','0',
    '+','b','1','4','+','F','F','F','d','5','+','d','0','+','F','F',
    'd','0','+','d','0','+','d','0','+','d','0','+','d','0','+','d',
    '0','+','d','0','+','3','7','+','I','D','L',':','o','d','b','c',
    'c','f','g','/','C','f','g','S','v','c','/','S','Q','L','N','o',
    'D','a','t','a','F','o','u','n','d',':','1','.','0','g','0','+',
    '0','+','1','5','4','9','2','3','6','3','9','4','+','1','3','+',
    'G','e','t','D','a','t','a','S','o','u','r','c','e','(','3','+',
    '8','+','K','e','y','V','a','l','u','e','>','d','5','1','2','+',
    '8','+','D','S','V','a','l','u','e','s','<','b','1','1','+','d',
    '5','1','2','+','K','d','3','0','+','F','F','F','F','G','G','G',
    'd','3','0','+','1','0','+','s','q','l','W','a','r','n','i','n',
    'g','<','c','0','+','b','1','4','+','F','F','F','d','5','+','d',
    '0','+','F','F','d','0','+','d','0','+','d','0','+','d','0','+',
    'd','0','+','d','0','+','d','0','+','3','+','3','3','+','I','D',
    'L',':','o','d','b','c','c','f','g','/','C','f','g','S','v','c',
    '/','P','a','r','a','m','E','r','r','o','r',':','1','.','0','g',
    '1','+','d','0','+','3','1','+','I','D','L',':','o','d','b','c',
    'c','f','g','/','C','f','g','S','v','c','/','S','Q','L','E','r',
    'r','o','r',':','1','.','0','g','1','+','c','0','+','b','1','4',
    '+','F','F','F','d','5','+','d','0','+','F','F','d','0','+','d',
    '0','+','d','0','+','d','0','+','d','0','+','d','0','+','d','0',
    '+','3','7','+','I','D','L',':','o','d','b','c','c','f','g','/',
    'C','f','g','S','v','c','/','S','Q','L','N','o','D','a','t','a',
    'F','o','u','n','d',':','1','.','0','g','0','+','0','+','2','8',
    '1','5','6','5','7','9','7','-','1','4','+','D','r','o','p','D',
    'a','t','a','S','o','u','r','c','e','(','2','+','8','+','K','e',
    'y','V','a','l','u','e','>','d','5','1','2','+','1','0','+','s',
    'q','l','W','a','r','n','i','n','g','<','c','0','+','b','1','4',
    '+','F','F','F','d','5','+','d','0','+','F','F','d','0','+','d',
    '0','+','d','0','+','d','0','+','d','0','+','d','0','+','d','0',
    '+','4','+','3','3','+','I','D','L',':','o','d','b','c','c','f',
    'g','/','C','f','g','S','v','c','/','P','a','r','a','m','E','r',
    'r','o','r',':','1','.','0','g','1','+','d','0','+','3','1','+',
    'I','D','L',':','o','d','b','c','c','f','g','/','C','f','g','S',
    'v','c','/','S','Q','L','E','r','r','o','r',':','1','.','0','g',
    '1','+','c','0','+','b','1','4','+','F','F','F','d','5','+','d',
    '0','+','F','F','d','0','+','d','0','+','d','0','+','d','0','+',
    'd','0','+','d','0','+','d','0','+','3','7','+','I','D','L',':',
    'o','d','b','c','c','f','g','/','C','f','g','S','v','c','/','S',
    'Q','L','N','o','D','a','t','a','F','o','u','n','d',':','1','.',
    '0','g','0','+','3','5','+','I','D','L',':','o','d','b','c','c',
    'f','g','/','C','f','g','S','v','c','/','C','F','G','D','a','t',
    'a','E','r','r','o','r',':','1','.','0','g','0','+','0','+','1',
    '7','0','7','7','6','7','7','8','6','-','1','3','+','S','e','t',
    'D','a','t','a','S','o','u','r','c','e','(','2','+','8','+','D',
    'S','V','a','l','u','e','s','>','b','1','1','+','d','5','1','2',
    '+','K','d','3','0','+','F','F','F','F','G','G','G','d','3','0',
    '+','1','0','+','s','q','l','W','a','r','n','i','n','g','<','c',
    '0','+','b','1','4','+','F','F','F','d','5','+','d','0','+','F',
    'F','d','0','+','d','0','+','d','0','+','d','0','+','d','0','+',
    'd','0','+','d','0','+','3','+','3','3','+','I','D','L',':','o',
    'd','b','c','c','f','g','/','C','f','g','S','v','c','/','P','a',
    'r','a','m','E','r','r','o','r',':','1','.','0','g','1','+','d',
    '0','+','3','1','+','I','D','L',':','o','d','b','c','c','f','g',
    '/','C','f','g','S','v','c','/','S','Q','L','E','r','r','o','r',
    ':','1','.','0','g','1','+','c','0','+','b','1','4','+','F','F',
    'F','d','5','+','d','0','+','F','F','d','0','+','d','0','+','d',
    '0','+','d','0','+','d','0','+','d','0','+','d','0','+','3','7',
    '+','I','D','L',':','o','d','b','c','c','f','g','/','C','f','g',
    'S','v','c','/','S','Q','L','N','o','D','a','t','a','F','o','u',
    'n','d',':','1','.','0','g','0','+','0','+','1','9','0','3','9',
    '0','0','2','1','5','-','1','6','+','A','d','d','N','e','w','D',
    'a','t','a','S','o','u','r','c','e','(','2','+','8','+','D','S',
    'V','a','l','u','e','s','>','b','1','1','+','d','5','1','2','+',
    'K','d','3','0','+','F','F','F','F','G','G','G','d','3','0','+',
    '1','0','+','s','q','l','W','a','r','n','i','n','g','<','c','0',
    '+','b','1','4','+','F','F','F','d','5','+','d','0','+','F','F',
    'd','0','+','d','0','+','d','0','+','d','0','+','d','0','+','d',
    '0','+','d','0','+','3','+','3','3','+','I','D','L',':','o','d',
    'b','c','c','f','g','/','C','f','g','S','v','c','/','P','a','r',
    'a','m','E','r','r','o','r',':','1','.','0','g','1','+','d','0',
    '+','3','1','+','I','D','L',':','o','d','b','c','c','f','g','/',
    'C','f','g','S','v','c','/','S','Q','L','E','r','r','o','r',':',
    '1','.','0','g','1','+','c','0','+','b','1','4','+','F','F','F',
    'd','5','+','d','0','+','F','F','d','0','+','d','0','+','d','0',
    '+','d','0','+','d','0','+','d','0','+','d','0','+','3','7','+',
    'I','D','L',':','o','d','b','c','c','f','g','/','C','f','g','S',
    'v','c','/','S','Q','L','N','o','D','a','t','a','F','o','u','n',
    'd',':','1','.','0','g','0','+','0','+','2','8','0','0','6','8',
    '3','3','+','1','9','+','C','h','e','c','k','D','a','t','a','S',
    'o','u','r','c','e','N','a','m','e','(','2','+','8','+','K','e',
    'y','V','a','l','u','e','>','d','5','1','2','+','1','0','+','s',
    'q','l','W','a','r','n','i','n','g','<','c','0','+','b','1','4',
    '+','F','F','F','d','5','+','d','0','+','F','F','d','0','+','d',
    '0','+','d','0','+','d','0','+','d','0','+','d','0','+','d','0',
    '+','3','+','3','3','+','I','D','L',':','o','d','b','c','c','f',
    'g','/','C','f','g','S','v','c','/','P','a','r','a','m','E','r',
    'r','o','r',':','1','.','0','g','1','+','d','0','+','3','1','+',
    'I','D','L',':','o','d','b','c','c','f','g','/','C','f','g','S',
    'v','c','/','S','Q','L','E','r','r','o','r',':','1','.','0','g',
    '1','+','c','0','+','b','1','4','+','F','F','F','d','5','+','d',
    '0','+','F','F','d','0','+','d','0','+','d','0','+','d','0','+',
    'd','0','+','d','0','+','d','0','+','3','7','+','I','D','L',':',
    'o','d','b','c','c','f','g','/','C','f','g','S','v','c','/','S',
    'Q','L','N','o','D','a','t','a','F','o','u','n','d',':','1','.',
    '0','g','0','+','0','+','9','1','4','6','1','5','5','2','6','+',
    '1','3','+','G','e','t','D','S','N','C','o','n','t','r','o','l',
    '(','4','+','8','+','K','e','y','V','a','l','u','e','>','d','5',
    '1','2','+','1','0','+','a','u','t','o','m','a','t','i','o','n',
    '<','F','9','+','c','u','r','S','t','a','t','u','s','<','F','1',
    '0','+','s','q','l','W','a','r','n','i','n','g','<','c','0','+',
    'b','1','4','+','F','F','F','d','5','+','d','0','+','F','F','d',
    '0','+','d','0','+','d','0','+','d','0','+','d','0','+','d','0',
    '+','d','0','+','3','+','3','3','+','I','D','L',':','o','d','b',
    'c','c','f','g','/','C','f','g','S','v','c','/','P','a','r','a',
    'm','E','r','r','o','r',':','1','.','0','g','1','+','d','0','+',
    '3','1','+','I','D','L',':','o','d','b','c','c','f','g','/','C',
    'f','g','S','v','c','/','S','Q','L','E','r','r','o','r',':','1',
    '.','0','g','1','+','c','0','+','b','1','4','+','F','F','F','d',
    '5','+','d','0','+','F','F','d','0','+','d','0','+','d','0','+',
    'd','0','+','d','0','+','d','0','+','d','0','+','3','7','+','I',
    'D','L',':','o','d','b','c','c','f','g','/','C','f','g','S','v',
    'c','/','S','Q','L','N','o','D','a','t','a','F','o','u','n','d',
    ':','1','.','0','g','0','+','0','+','8','8','4','3','6','8','2',
    '1','7','-','1','3','+','S','e','t','D','S','N','C','o','n','t',
    'r','o','l','(','3','+','8','+','K','e','y','V','a','l','u','e',
    '>','d','5','1','2','+','1','0','+','a','u','t','o','m','a','t',
    'i','o','n','>','F','1','0','+','s','q','l','W','a','r','n','i',
    'n','g','<','c','0','+','b','1','4','+','F','F','F','d','5','+',
    'd','0','+','F','F','d','0','+','d','0','+','d','0','+','d','0',
    '+','d','0','+','d','0','+','d','0','+','3','+','3','3','+','I',
    'D','L',':','o','d','b','c','c','f','g','/','C','f','g','S','v',
    'c','/','P','a','r','a','m','E','r','r','o','r',':','1','.','0',
    'g','1','+','d','0','+','3','1','+','I','D','L',':','o','d','b',
    'c','c','f','g','/','C','f','g','S','v','c','/','S','Q','L','E',
    'r','r','o','r',':','1','.','0','g','1','+','c','0','+','b','1',
    '4','+','F','F','F','d','5','+','d','0','+','F','F','d','0','+',
    'd','0','+','d','0','+','d','0','+','d','0','+','d','0','+','d',
    '0','+','3','7','+','I','D','L',':','o','d','b','c','c','f','g',
    '/','C','f','g','S','v','c','/','S','Q','L','N','o','D','a','t',
    'a','F','o','u','n','d',':','1','.','0','g','0','+','0','+','1',
    '2','7','1','1','5','9','4','3','4','-','1','7','+','G','e','t',
    'R','e','s','o','u','r','c','e','V','a','l','u','e','s','(','4',
    '+','7','+','K','e','y','T','y','p','e','>','h','4','+','8','+',
    'K','e','y','V','a','l','u','e','>','d','5','1','2','+','1','2',
    '+','R','e','s','V','a','l','u','e','L','i','s','t','<','c','0',
    '+','b','4','+','d','5','1','2','+','G','d','0','+','F','1','0',
    '+','s','q','l','W','a','r','n','i','n','g','<','c','0','+','b',
    '1','4','+','F','F','F','d','5','+','d','0','+','F','F','d','0',
    '+','d','0','+','d','0','+','d','0','+','d','0','+','d','0','+',
    'd','0','+','3','+','3','3','+','I','D','L',':','o','d','b','c',
    'c','f','g','/','C','f','g','S','v','c','/','P','a','r','a','m',
    'E','r','r','o','r',':','1','.','0','g','1','+','d','0','+','3',
    '1','+','I','D','L',':','o','d','b','c','c','f','g','/','C','f',
    'g','S','v','c','/','S','Q','L','E','r','r','o','r',':','1','.',
    '0','g','1','+','c','0','+','b','1','4','+','F','F','F','d','5',
    '+','d','0','+','F','F','d','0','+','d','0','+','d','0','+','d',
    '0','+','d','0','+','d','0','+','d','0','+','3','7','+','I','D',
    'L',':','o','d','b','c','c','f','g','/','C','f','g','S','v','c',
    '/','S','Q','L','N','o','D','a','t','a','F','o','u','n','d',':',
    '1','.','0','g','0','+','0','+','2','0','2','2','2','9','6','5',
    '1','9','+','1','7','+','S','e','t','R','e','s','o','u','r','c',
    'e','V','a','l','u','e','s','(','4','+','7','+','K','e','y','T',
    'y','p','e','>','h','4','+','8','+','K','e','y','V','a','l','u',
    'e','>','d','5','1','2','+','1','2','+','R','e','s','V','a','l',
    'u','e','L','i','s','t','>','c','0','+','b','4','+','d','5','1',
    '2','+','G','d','0','+','F','1','0','+','s','q','l','W','a','r',
    'n','i','n','g','<','c','0','+','b','1','4','+','F','F','F','d',
    '5','+','d','0','+','F','F','d','0','+','d','0','+','d','0','+',
    'd','0','+','d','0','+','d','0','+','d','0','+','3','+','3','3',
    '+','I','D','L',':','o','d','b','c','c','f','g','/','C','f','g',
    'S','v','c','/','P','a','r','a','m','E','r','r','o','r',':','1',
    '.','0','g','1','+','d','0','+','3','1','+','I','D','L',':','o',
    'd','b','c','c','f','g','/','C','f','g','S','v','c','/','S','Q',
    'L','E','r','r','o','r',':','1','.','0','g','1','+','c','0','+',
    'b','1','4','+','F','F','F','d','5','+','d','0','+','F','F','d',
    '0','+','d','0','+','d','0','+','d','0','+','d','0','+','d','0',
    '+','d','0','+','3','7','+','I','D','L',':','o','d','b','c','c',
    'f','g','/','C','f','g','S','v','c','/','S','Q','L','N','o','D',
    'a','t','a','F','o','u','n','d',':','1','.','0','g','0','+','0',
    '+','1','8','8','3','8','8','2','7','1','2','+','2','0','+','G',
    'e','t','E','n','v','i','r','o','n','m','e','n','t','V','a','l',
    'u','e','s','(','4','+','7','+','K','e','y','T','y','p','e','>',
    'h','4','+','8','+','K','e','y','V','a','l','u','e','>','d','5',
    '1','2','+','1','2','+','E','n','v','V','a','l','u','e','L','i',
    's','t','<','c','0','+','b','3','+','F','F','d','0','+','1','0',
    '+','s','q','l','W','a','r','n','i','n','g','<','c','0','+','b',
    '1','4','+','F','F','F','d','5','+','d','0','+','F','F','d','0',
    '+','d','0','+','d','0','+','d','0','+','d','0','+','d','0','+',
    'd','0','+','3','+','3','3','+','I','D','L',':','o','d','b','c',
    'c','f','g','/','C','f','g','S','v','c','/','P','a','r','a','m',
    'E','r','r','o','r',':','1','.','0','g','1','+','d','0','+','3',
    '1','+','I','D','L',':','o','d','b','c','c','f','g','/','C','f',
    'g','S','v','c','/','S','Q','L','E','r','r','o','r',':','1','.',
    '0','g','1','+','c','0','+','b','1','4','+','F','F','F','d','5',
    '+','d','0','+','F','F','d','0','+','d','0','+','d','0','+','d',
    '0','+','d','0','+','d','0','+','d','0','+','3','7','+','I','D',
    'L',':','o','d','b','c','c','f','g','/','C','f','g','S','v','c',
    '/','S','Q','L','N','o','D','a','t','a','F','o','u','n','d',':',
    '1','.','0','g','0','+','0','+','1','1','4','3','5','1','5','8',
    '7','1','-','2','0','+','S','e','t','E','n','v','i','r','o','n',
    'm','e','n','t','V','a','l','u','e','s','(','4','+','7','+','K',
    'e','y','T','y','p','e','>','h','4','+','8','+','K','e','y','V',
    'a','l','u','e','>','d','5','1','2','+','1','2','+','E','n','v',
    'V','a','l','u','e','L','i','s','t','>','c','0','+','b','3','+',
    'F','F','d','0','+','1','0','+','s','q','l','W','a','r','n','i',
    'n','g','<','c','0','+','b','1','4','+','F','F','F','d','5','+',
    'd','0','+','F','F','d','0','+','d','0','+','d','0','+','d','0',
    '+','d','0','+','d','0','+','d','0','+','3','+','3','3','+','I',
    'D','L',':','o','d','b','c','c','f','g','/','C','f','g','S','v',
    'c','/','P','a','r','a','m','E','r','r','o','r',':','1','.','0',
    'g','1','+','d','0','+','3','1','+','I','D','L',':','o','d','b',
    'c','c','f','g','/','C','f','g','S','v','c','/','S','Q','L','E',
    'r','r','o','r',':','1','.','0','g','1','+','c','0','+','b','1',
    '4','+','F','F','F','d','5','+','d','0','+','F','F','d','0','+',
    'd','0','+','d','0','+','d','0','+','d','0','+','d','0','+','d',
    '0','+','3','7','+','I','D','L',':','o','d','b','c','c','f','g',
    '/','C','f','g','S','v','c','/','S','Q','L','N','o','D','a','t',
    'a','F','o','u','n','d',':','1','.','0','g','0','+','0','+','8',
    '9','1','4','0','1','8','6','2','-','2','2','+','G','e','t','S',
    't','a','r','t','u','p','C','o','n','f','i','g','V','a','l','u',
    'e','s','(','5','+','1','3','+','s','e','r','v','i','c','e','S',
    't','a','t','u','s','<','I','2','3','+','s','e','r','v','i','c',
    'e','S','t','a','t','u','s','C','h','a','n','g','e','T','i','m',
    'e','<','F','1','0','+','i','s','o','M','a','p','p','i','n','g',
    '<','F','6','+','D','S','L','i','s','t','<','c','0','+','b','1',
    '6','+','d','5','1','2','+','F','I','h','1','+','F','F','F','F',
    'G','G','G','I','F','c','0','+','b','4','+','d','5','1','2','+',
    'G','d','0','+','F','c','0','+','b','3','+','F','F','d','0','+',
    'c','0','+','H','1','0','+','s','q','l','W','a','r','n','i','n',
    'g','<','c','0','+','b','1','4','+','F','F','F','d','5','+','d',
    '0','+','F','F','d','0','+','d','0','+','d','0','+','d','0','+',
    'd','0','+','d','0','+','d','0','+','3','+','3','3','+','I','D',
    'L',':','o','d','b','c','c','f','g','/','C','f','g','S','v','c',
    '/','P','a','r','a','m','E','r','r','o','r',':','1','.','0','g',
    '1','+','d','0','+','3','1','+','I','D','L',':','o','d','b','c',
    'c','f','g','/','C','f','g','S','v','c','/','S','Q','L','E','r',
    'r','o','r',':','1','.','0','g','1','+','c','0','+','b','1','4',
    '+','F','F','F','d','5','+','d','0','+','F','F','d','0','+','d',
    '0','+','d','0','+','d','0','+','d','0','+','d','0','+','d','0',
    '+','3','7','+','I','D','L',':','o','d','b','c','c','f','g','/',
    'C','f','g','S','v','c','/','S','Q','L','N','o','D','a','t','a',
    'F','o','u','n','d',':','1','.','0','g','0','+','0','+','1','1',
    '6','8','3','1','1','7','0','2','-','1','9','+','G','e','t','D',
    'a','t','a','S','o','u','r','c','e','V','a','l','u','e','s','(',
    '3','+','6','+','D','S','N','a','m','e','>','d','5','1','2','+',
    '8','+','D','S','V','a','l','u','e','s','<','b','1','6','+','d',
    '5','1','2','+','F','I','h','1','+','F','F','F','F','G','G','G',
    'I','F','c','0','+','b','4','+','d','5','1','2','+','G','d','0',
    '+','F','c','0','+','b','3','+','F','F','d','0','+','c','0','+',
    'H','1','0','+','s','q','l','W','a','r','n','i','n','g','<','c',
    '0','+','b','1','4','+','F','F','F','d','5','+','d','0','+','F',
    'F','d','0','+','d','0','+','d','0','+','d','0','+','d','0','+',
    'd','0','+','d','0','+','3','+','3','3','+','I','D','L',':','o',
    'd','b','c','c','f','g','/','C','f','g','S','v','c','/','P','a',
    'r','a','m','E','r','r','o','r',':','1','.','0','g','1','+','d',
    '0','+','3','1','+','I','D','L',':','o','d','b','c','c','f','g',
    '/','C','f','g','S','v','c','/','S','Q','L','E','r','r','o','r',
    ':','1','.','0','g','1','+','c','0','+','b','1','4','+','F','F',
    'F','d','5','+','d','0','+','F','F','d','0','+','d','0','+','d',
    '0','+','d','0','+','d','0','+','d','0','+','d','0','+','3','7',
    '+','I','D','L',':','o','d','b','c','c','f','g','/','C','f','g',
    'S','v','c','/','S','Q','L','N','o','D','a','t','a','F','o','u',
    'n','d',':','1','.','0','g','0','+','0','+','1','5','4','0','0',
    '7','8','4','3','1','-','1','1','+','S','e','t','D','S','S','t',
    'a','t','u','s','(','4','+','4','+','D','S','N','m','>','d','5',
    '1','2','+','6','+','s','t','a','t','u','s','>','I','1','7','+',
    's','t','a','t','u','s','C','h','a','n','g','e','d','T','i','m',
    'e','>','d','3','0','+','1','0','+','s','q','l','W','a','r','n',
    'i','n','g','<','c','0','+','b','1','4','+','F','F','F','d','5',
    '+','d','0','+','F','F','d','0','+','d','0','+','d','0','+','d',
    '0','+','d','0','+','d','0','+','d','0','+','3','+','3','3','+',
    'I','D','L',':','o','d','b','c','c','f','g','/','C','f','g','S',
    'v','c','/','P','a','r','a','m','E','r','r','o','r',':','1','.',
    '0','g','1','+','d','0','+','3','1','+','I','D','L',':','o','d',
    'b','c','c','f','g','/','C','f','g','S','v','c','/','S','Q','L',
    'E','r','r','o','r',':','1','.','0','g','1','+','c','0','+','b',
    '1','4','+','F','F','F','d','5','+','d','0','+','F','F','d','0',
    '+','d','0','+','d','0','+','d','0','+','d','0','+','d','0','+',
    'd','0','+','3','7','+','I','D','L',':','o','d','b','c','c','f',
    'g','/','C','f','g','S','v','c','/','S','Q','L','N','o','D','a',
    't','a','F','o','u','n','d',':','1','.','0','g','0','+','0','+',
    '1','2','6','2','5','3','3','9','9','7','+','1','1','+','S','e',
    't','A','S','S','t','a','t','u','s','(','3','+','6','+','s','t',
    'a','t','u','s','>','I','1','7','+','s','t','a','t','u','s','C',
    'h','a','n','g','e','d','T','i','m','e','>','d','3','0','+','1',
    '0','+','s','q','l','W','a','r','n','i','n','g','<','c','0','+',
    'b','1','4','+','F','F','F','d','5','+','d','0','+','F','F','d',
    '0','+','d','0','+','d','0','+','d','0','+','d','0','+','d','0',
    '+','d','0','+','3','+','3','3','+','I','D','L',':','o','d','b',
    'c','c','f','g','/','C','f','g','S','v','c','/','P','a','r','a',
    'm','E','r','r','o','r',':','1','.','0','g','1','+','d','0','+',
    '3','1','+','I','D','L',':','o','d','b','c','c','f','g','/','C',
    'f','g','S','v','c','/','S','Q','L','E','r','r','o','r',':','1',
    '.','0','g','1','+','c','0','+','b','1','4','+','F','F','F','d',
    '5','+','d','0','+','F','F','d','0','+','d','0','+','d','0','+',
    'd','0','+','d','0','+','d','0','+','d','0','+','3','7','+','I',
    'D','L',':','o','d','b','c','c','f','g','/','C','f','g','S','v',
    'c','/','S','Q','L','N','o','D','a','t','a','F','o','u','n','d',
    ':','1','.','0','g','0','+','0','+','2','0','3','8','3','1','3',
    '2','4','1','-','2','7','+','C','r','e','a','t','e','C','o','n',
    'f','i','g','u','r','a','t','i','o','n','D','a','t','a','b','a',
    's','e','(','3','+','1','5','+','D','a','t','a','b','a','s','e',
    'V','e','r','s','i','o','n','>','F','1','9','+','s','q','l','V',
    'o','l','u','m','e','L','o','c','a','t','i','o','n','N','m','>',
    'd','0','+','1','0','+','s','q','l','W','a','r','n','i','n','g',
    '<','c','0','+','b','1','4','+','F','F','F','d','5','+','d','0',
    '+','F','F','d','0','+','d','0','+','d','0','+','d','0','+','d',
    '0','+','d','0','+','d','0','+','4','+','3','3','+','I','D','L',
    ':','o','d','b','c','c','f','g','/','C','f','g','S','v','c','/',
    'P','a','r','a','m','E','r','r','o','r',':','1','.','0','g','1',
    '+','d','0','+','3','1','+','I','D','L',':','o','d','b','c','c',
    'f','g','/','C','f','g','S','v','c','/','S','Q','L','E','r','r',
    'o','r',':','1','.','0','g','1','+','c','0','+','b','1','4','+',
    'F','F','F','d','5','+','d','0','+','F','F','d','0','+','d','0',
    '+','d','0','+','d','0','+','d','0','+','d','0','+','d','0','+',
    '3','9','+','I','D','L',':','o','d','b','c','c','f','g','/','C',
    'f','g','S','v','c','/','S','Q','L','I','n','v','a','l','i','d',
    'H','a','n','d','l','e',':','1','.','0','g','0','+','3','6','+',
    'I','D','L',':','o','d','b','c','c','f','g','/','C','f','g','S',
    'v','c','/','D','a','t','a','b','a','s','e','F','o','u','n','d',
    ':','1','.','0','g','0','+','0','+','2','0','8','4','5','6','7',
    '0','3','7','+','1','9','+','C','r','e','a','t','e','D','a','t',
    'a','t','y','p','e','T','a','b','l','e','(','3','+','2','0','+',
    'D','a','t','a','t','y','p','e','T','a','b','l','e','V','e','r',
    's','i','o','n','>','F','1','9','+','s','q','l','V','o','l','u',
    'm','e','L','o','c','a','t','i','o','n','N','m','>','d','0','+',
    '1','0','+','s','q','l','W','a','r','n','i','n','g','<','c','0',
    '+','b','1','4','+','F','F','F','d','5','+','d','0','+','F','F',
    'd','0','+','d','0','+','d','0','+','d','0','+','d','0','+','d',
    '0','+','d','0','+','4','+','3','3','+','I','D','L',':','o','d',
    'b','c','c','f','g','/','C','f','g','S','v','c','/','P','a','r',
    'a','m','E','r','r','o','r',':','1','.','0','g','1','+','d','0',
    '+','3','1','+','I','D','L',':','o','d','b','c','c','f','g','/',
    'C','f','g','S','v','c','/','S','Q','L','E','r','r','o','r',':',
    '1','.','0','g','1','+','c','0','+','b','1','4','+','F','F','F',
    'd','5','+','d','0','+','F','F','d','0','+','d','0','+','d','0',
    '+','d','0','+','d','0','+','d','0','+','d','0','+','3','9','+',
    'I','D','L',':','o','d','b','c','c','f','g','/','C','f','g','S',
    'v','c','/','S','Q','L','I','n','v','a','l','i','d','H','a','n',
    'd','l','e',':','1','.','0','g','0','+','3','6','+','I','D','L',
    ':','o','d','b','c','c','f','g','/','C','f','g','S','v','c','/',
    'D','a','t','a','b','a','s','e','F','o','u','n','d',':','1','.',
    '0','g','0','+','0','+','1','7','6','0','0','0','6','8','6','7',
    '-','2','5','+','D','r','o','p','C','o','n','f','i','g','u','r',
    'a','t','i','o','n','D','a','t','a','b','a','s','e','(','1','+',
    '1','0','+','s','q','l','W','a','r','n','i','n','g','<','c','0',
    '+','b','1','4','+','F','F','F','d','5','+','d','0','+','F','F',
    'd','0','+','d','0','+','d','0','+','d','0','+','d','0','+','d',
    '0','+','d','0','+','4','+','3','3','+','I','D','L',':','o','d',
    'b','c','c','f','g','/','C','f','g','S','v','c','/','P','a','r',
    'a','m','E','r','r','o','r',':','1','.','0','g','1','+','d','0',
    '+','3','1','+','I','D','L',':','o','d','b','c','c','f','g','/',
    'C','f','g','S','v','c','/','S','Q','L','E','r','r','o','r',':',
    '1','.','0','g','1','+','c','0','+','b','1','4','+','F','F','F',
    'd','5','+','d','0','+','F','F','d','0','+','d','0','+','d','0',
    '+','d','0','+','d','0','+','d','0','+','d','0','+','3','9','+',
    'I','D','L',':','o','d','b','c','c','f','g','/','C','f','g','S',
    'v','c','/','S','Q','L','I','n','v','a','l','i','d','H','a','n',
    'd','l','e',':','1','.','0','g','0','+','3','9','+','I','D','L',
    ':','o','d','b','c','c','f','g','/','C','f','g','S','v','c','/',
    'D','a','t','a','b','a','s','e','N','o','t','F','o','u','n','d',
    ':','1','.','0','g','0','+','0','+','1','4','8','7','7','8','5',
    '5','7','5','-','1','7','+','D','r','o','p','D','a','t','a','t',
    'y','p','e','T','a','b','l','e','(','1','+','1','0','+','s','q',
    'l','W','a','r','n','i','n','g','<','c','0','+','b','1','4','+',
    'F','F','F','d','5','+','d','0','+','F','F','d','0','+','d','0',
    '+','d','0','+','d','0','+','d','0','+','d','0','+','d','0','+',
    '4','+','3','3','+','I','D','L',':','o','d','b','c','c','f','g',
    '/','C','f','g','S','v','c','/','P','a','r','a','m','E','r','r',
    'o','r',':','1','.','0','g','1','+','d','0','+','3','1','+','I',
    'D','L',':','o','d','b','c','c','f','g','/','C','f','g','S','v',
    'c','/','S','Q','L','E','r','r','o','r',':','1','.','0','g','1',
    '+','c','0','+','b','1','4','+','F','F','F','d','5','+','d','0',
    '+','F','F','d','0','+','d','0','+','d','0','+','d','0','+','d',
    '0','+','d','0','+','d','0','+','3','9','+','I','D','L',':','o',
    'd','b','c','c','f','g','/','C','f','g','S','v','c','/','S','Q',
    'L','I','n','v','a','l','i','d','H','a','n','d','l','e',':','1',
    '.','0','g','0','+','3','9','+','I','D','L',':','o','d','b','c',
    'c','f','g','/','C','f','g','S','v','c','/','D','a','t','a','b',
    'a','s','e','N','o','t','F','o','u','n','d',':','1','.','0','g',
    '0','+','0','+','5','4','5','9','1','6','4','3','+','1','2','+',
    'G','e','n','e','r','a','l','P','a','r','a','m','(','1','+','9',
    '+','p','a','r','a','m','L','i','s','t','>','c','0','+','b','3',
    '+','I','I','c','0','+','H','1','+','3','3','+','I','D','L',':',
    'o','d','b','c','c','f','g','/','C','f','g','S','v','c','/','P',
    'a','r','a','m','E','r','r','o','r',':','1','.','0','g','1','+',
    'd','0','+','0','+','3','0','8','9','4','7','3','3','9','+','1',
    '4','+','S','t','o','p','E','s','p','O','r','p','h','a','n','s',
    '(','1','+','1','0','+','h','a','n','d','l','e','L','i','s','t',
    '>','c','0','+','a','1','+','1','0','+','I','0','+','0','+','2',
    '0','4','4','4','7','1','9','5','1','+','9','+','S','Q','L','C',
    'a','n','c','e','l','(','8','+','7','+','s','e','g','m','e','n',
    't','>','I','3','+','c','p','u','>','I','3','+','p','i','n','>',
    'I','7','+','s','r','v','r','A','p','i','>','F','1','3','+','r',
    'e','q','u','e','s','t','e','r','T','y','p','e','>','I','2','0',
    '+','r','e','q','u','e','s','t','e','r','A','p','p','l','i','c',
    'a','t','i','o','n','>','d','1','2','9','+','1','7','+','r','e',
    'q','u','e','s','t','e','r','C','o','m','p','u','t','e','r','>',
    'd','1','2','9','+','1','3','+','r','e','q','u','e','s','t','e',
    'r','N','a','m','e','>','d','1','2','9','+','0','+','0','+', 0};
#define odbccfg_CfgSvc_ics_ ((IDL_unsigned_long) 6495)

/*
 * Interface creation function for 'odbccfg_CfgSvc'
 */
extern "C" CEE_status
odbccfg_CfgSvc_ifc_(
  /* Out */ CEE_handle_def *interface_handle);

/*
 * Synchronous implementation creation function for interface 'odbccfg_CfgSvc'
 * Should only be be called via the ODBCCFG_CFGSVC_SIM_ macro.
 */
extern "C" CEE_status
odbccfg_CfgSvc_sim_(
  /* Out */ CEE_handle_def *implementation_handle,
  /* In  */ ...);

/*
 * Synchronous implementation creation macro for interface 'odbccfg_CfgSvc'
 */
#define ODBCCFG_CFGSVC_SIM_(impl_) odbccfg_CfgSvc_sim_((impl_) \
    , odbccfg_CfgSvc_GetObjectNameList_sme_ \
    , odbccfg_CfgSvc_GetDataSource_sme_ \
    , odbccfg_CfgSvc_DropDataSource_sme_ \
    , odbccfg_CfgSvc_SetDataSource_sme_ \
    , odbccfg_CfgSvc_AddNewDataSource_sme_ \
    , odbccfg_CfgSvc_CheckDataSourceName_sme_ \
    , odbccfg_CfgSvc_GetDSNControl_sme_ \
    , odbccfg_CfgSvc_SetDSNControl_sme_ \
    , odbccfg_CfgSvc_GetResourceValues_sme_ \
    , odbccfg_CfgSvc_SetResourceValues_sme_ \
    , odbccfg_CfgSvc_GetEnvironmentValues_sme_ \
    , odbccfg_CfgSvc_SetEnvironmentValues_sme_ \
    , odbccfg_CfgSvc_GetStartupConfigValues_sme_ \
    , odbccfg_CfgSvc_GetDataSourceValues_sme_ \
    , odbccfg_CfgSvc_SetDSStatus_sme_ \
    , odbccfg_CfgSvc_SetASStatus_sme_ \
    , odbccfg_CfgSvc_CreateConfigurationDatabase_sme_ \
    , odbccfg_CfgSvc_CreateDatatypeTable_sme_ \
    , odbccfg_CfgSvc_DropConfigurationDatabase_sme_ \
    , odbccfg_CfgSvc_DropDatatypeTable_sme_ \
    , odbccfg_CfgSvc_GeneralParam_sme_ \
    , odbccfg_CfgSvc_StopEspOrphans_sme_ \
    , odbccfg_CfgSvc_SQLCancel_sme_ )

/*
 * Asynchronous implementation creation function for interface 'odbccfg_CfgSvc'
 * Should only be be called via the ODBCCFG_CFGSVC_AIM_ macro.
 */
extern "C" CEE_status
odbccfg_CfgSvc_aim_(
  /* Out */ CEE_handle_def *implementation_handle,
  /* In  */ ...);

/*
 * Asynchronous implementation creation macro for interface 'odbccfg_CfgSvc'
 */
#define ODBCCFG_CFGSVC_AIM_(impl_) odbccfg_CfgSvc_aim_((impl_) \
    , odbccfg_CfgSvc_GetObjectNameList_ame_ \
    , odbccfg_CfgSvc_GetDataSource_ame_ \
    , odbccfg_CfgSvc_DropDataSource_ame_ \
    , odbccfg_CfgSvc_SetDataSource_ame_ \
    , odbccfg_CfgSvc_AddNewDataSource_ame_ \
    , odbccfg_CfgSvc_CheckDataSourceName_ame_ \
    , odbccfg_CfgSvc_GetDSNControl_ame_ \
    , odbccfg_CfgSvc_SetDSNControl_ame_ \
    , odbccfg_CfgSvc_GetResourceValues_ame_ \
    , odbccfg_CfgSvc_SetResourceValues_ame_ \
    , odbccfg_CfgSvc_GetEnvironmentValues_ame_ \
    , odbccfg_CfgSvc_SetEnvironmentValues_ame_ \
    , odbccfg_CfgSvc_GetStartupConfigValues_ame_ \
    , odbccfg_CfgSvc_GetDataSourceValues_ame_ \
    , odbccfg_CfgSvc_SetDSStatus_ame_ \
    , odbccfg_CfgSvc_SetASStatus_ame_ \
    , odbccfg_CfgSvc_CreateConfigurationDatabase_ame_ \
    , odbccfg_CfgSvc_CreateDatatypeTable_ame_ \
    , odbccfg_CfgSvc_DropConfigurationDatabase_ame_ \
    , odbccfg_CfgSvc_DropDatatypeTable_ame_ \
    , odbccfg_CfgSvc_GeneralParam_ame_ \
    , odbccfg_CfgSvc_StopEspOrphans_ame_ \
    , odbccfg_CfgSvc_SQLCancel_ame_ )

/*
 * Synchronous Multi Threaded implementation creation function for interface 'odbccfg_CfgSvc'
 * Should only be be called via the ODBCCFG_CFGSVC_MSIM_ macro.
 */
extern "C" CEE_status
odbccfg_CfgSvc_msim_(
  /* Out */ CEE_handle_def *implementation_handle,
  /* In  */ ...);

/*
 * Synchronous Multi Threaded implementation creation macro for interface 'odbccfg_CfgSvc'
 */
#define ODBCCFG_CFGSVC_MSIM_(impl_) odbccfg_CfgSvc_msim_((impl_) \
    , odbccfg_CfgSvc_GetObjectNameList_sme_ \
    , odbccfg_CfgSvc_GetDataSource_sme_ \
    , odbccfg_CfgSvc_DropDataSource_sme_ \
    , odbccfg_CfgSvc_SetDataSource_sme_ \
    , odbccfg_CfgSvc_AddNewDataSource_sme_ \
    , odbccfg_CfgSvc_CheckDataSourceName_sme_ \
    , odbccfg_CfgSvc_GetDSNControl_sme_ \
    , odbccfg_CfgSvc_SetDSNControl_sme_ \
    , odbccfg_CfgSvc_GetResourceValues_sme_ \
    , odbccfg_CfgSvc_SetResourceValues_sme_ \
    , odbccfg_CfgSvc_GetEnvironmentValues_sme_ \
    , odbccfg_CfgSvc_SetEnvironmentValues_sme_ \
    , odbccfg_CfgSvc_GetStartupConfigValues_sme_ \
    , odbccfg_CfgSvc_GetDataSourceValues_sme_ \
    , odbccfg_CfgSvc_SetDSStatus_sme_ \
    , odbccfg_CfgSvc_SetASStatus_sme_ \
    , odbccfg_CfgSvc_CreateConfigurationDatabase_sme_ \
    , odbccfg_CfgSvc_CreateDatatypeTable_sme_ \
    , odbccfg_CfgSvc_DropConfigurationDatabase_sme_ \
    , odbccfg_CfgSvc_DropDatatypeTable_sme_ \
    , odbccfg_CfgSvc_GeneralParam_sme_ \
    , odbccfg_CfgSvc_StopEspOrphans_sme_ \
    , odbccfg_CfgSvc_SQLCancel_sme_ )

/*
 * Configured Object initialization function
 * for interface 'odbccfg_CfgSvc'
 */
extern "C" void
odbccfg_CfgSvc_coi_(
  /* In  */ const CEE_handle_def  *object_handle,
  /* In  */ const char            *param,
  /* In  */ long                  param_len,
  /* Out */ CEE_status            *sts,
  /* Out */ CEE_tag_def           *obj_tag,
  /* Out */ CEE_handle_def        *implementation_handle);

/**********************************
 * End interface 'odbccfg_CfgSvc' *
 **********************************/
/* End module: odbccfg */
/*
 * End translation unit: ODBCCFG
 */
#endif /* ODBCCFG_H_ */
