;// @@@ 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 @@@

; TranslationDll.def : Declares the module parameters for the DLL.

;DESCRIPTION "ODBC Translation DLL, Copyright (c) 2015-2017 Apache Software Foundation"
LIBRARY hp_translation03
EXPORTS
	SQLDriverToDataSource @1
	SQLDataSourceToDriver @2
