; 
; Exports of file IISLOG.DLL
;
; Autogenerated by gen_exportdef
; Written by Kai Tietz, 2007
;
LIBRARY IISLOG.DLL
EXPORTS
; public: __cdecl LOGGING::LOGGING(class LOGGING const & __ptr64) __ptr64
??0LOGGING@@QEAA@AEBV0@@Z
; public: __cdecl ODBC_CONNECTION::ODBC_CONNECTION(void) __ptr64
??0ODBC_CONNECTION@@QEAA@XZ
; public: __cdecl ODBC_PARAMETER::ODBC_PARAMETER(unsigned short,short,short,short,unsigned long) __ptr64
??0ODBC_PARAMETER@@QEAA@GFFFK@Z
; public: __cdecl ODBC_CONNECTION::~ODBC_CONNECTION(void) __ptr64
??1ODBC_CONNECTION@@QEAA@XZ
; public: __cdecl ODBC_PARAMETER::~ODBC_PARAMETER(void) __ptr64
??1ODBC_PARAMETER@@QEAA@XZ
; public: __cdecl ODBC_STATEMENT::~ODBC_STATEMENT(void) __ptr64
??1ODBC_STATEMENT@@QEAA@XZ
; public: class LOGGING & __ptr64 __cdecl LOGGING::operator=(class LOGGING const & __ptr64) __ptr64
??4LOGGING@@QEAAAEAV0@AEBV0@@Z
; public: class ODBC_STATEMENT * __ptr64 __cdecl ODBC_CONNECTION::AllocStatement(void) __ptr64
?AllocStatement@ODBC_CONNECTION@@QEAAPEAVODBC_STATEMENT@@XZ
; public: short __cdecl ODBC_PARAMETER::Bind(void * __ptr64) __ptr64
?Bind@ODBC_PARAMETER@@QEAAFPEAX@Z
; public: int __cdecl ODBC_STATEMENT::BindParameter(class ODBC_PARAMETER * __ptr64) __ptr64
?BindParameter@ODBC_STATEMENT@@QEAAHPEAVODBC_PARAMETER@@@Z
; public: int __cdecl ODBC_CONNECTION::Close(void) __ptr64
?Close@ODBC_CONNECTION@@QEAAHXZ
; public: int __cdecl ODBC_PARAMETER::CopyValue(unsigned long) __ptr64
?CopyValue@ODBC_PARAMETER@@QEAAHK@Z
; public: int __cdecl ODBC_PARAMETER::CopyValue(struct _SYSTEMTIME * __ptr64) __ptr64
?CopyValue@ODBC_PARAMETER@@QEAAHPEAU_SYSTEMTIME@@@Z
; public: int __cdecl ODBC_PARAMETER::CopyValue(void * __ptr64,long) __ptr64
?CopyValue@ODBC_PARAMETER@@QEAAHPEAXJ@Z
; public: int __cdecl ODBC_PARAMETER::CopyValue(char const * __ptr64) __ptr64
?CopyValue@ODBC_PARAMETER@@QEAAHPEBD@Z
; public: int __cdecl ODBC_PARAMETER::CopyValue(unsigned short const * __ptr64) __ptr64
?CopyValue@ODBC_PARAMETER@@QEAAHPEBG@Z
; public: static unsigned __int64 __cdecl ODBC_CONNECTION::DisplaySize(short,unsigned __int64)
?DisplaySize@ODBC_CONNECTION@@SA_KF_K@Z
; public: int __cdecl ODBC_STATEMENT::ExecDirect(char const * __ptr64,unsigned long) __ptr64
?ExecDirect@ODBC_STATEMENT@@QEAAHPEBDK@Z
; public: int __cdecl ODBC_STATEMENT::ExecuteStatement(void) __ptr64
?ExecuteStatement@ODBC_STATEMENT@@QEAAHXZ
; public: void __cdecl ODBC_STATEMENT::FreeColumnMemory(void) __ptr64
?FreeColumnMemory@ODBC_STATEMENT@@QEAAXXZ
; public: int __cdecl ODBC_CONNECTION::GetInfo(unsigned long,void * __ptr64,unsigned long,unsigned long * __ptr64) __ptr64
?GetInfo@ODBC_CONNECTION@@QEAAHKPEAXKPEAK@Z
; public: int __cdecl ODBC_CONNECTION::GetLastErrorText(class STR * __ptr64,void * __ptr64,short)const  __ptr64
?GetLastErrorText@ODBC_CONNECTION@@QEBAHPEAVSTR@@PEAXF@Z
; public: int __cdecl ODBC_CONNECTION::GetLastErrorTextAsHtml(class STR * __ptr64,void * __ptr64,short)const  __ptr64
?GetLastErrorTextAsHtml@ODBC_CONNECTION@@QEBAHPEAVSTR@@PEAXF@Z
; public: int __cdecl ODBC_CONNECTION::IsValid(void)const  __ptr64
?IsValid@ODBC_CONNECTION@@QEBAHXZ
; public: int __cdecl ODBC_STATEMENT::IsValid(void)const  __ptr64
?IsValid@ODBC_STATEMENT@@QEBAHXZ
; private: void __cdecl LOGGING::LockExclusive(void) __ptr64
?LockExclusive@LOGGING@@AEAAXXZ
; private: void __cdecl LOGGING::LockShared(void) __ptr64
?LockShared@LOGGING@@AEAAXXZ
; public: int __cdecl ODBC_STATEMENT::MoreResults(int * __ptr64) __ptr64
?MoreResults@ODBC_STATEMENT@@QEAAHPEAH@Z
; public: int __cdecl ODBC_CONNECTION::Open(char const * __ptr64,char const * __ptr64,char const * __ptr64,int) __ptr64
?Open@ODBC_CONNECTION@@QEAAHPEBD00H@Z
; public: int __cdecl ODBC_STATEMENT::PrepareStatement(char const * __ptr64) __ptr64
?PrepareStatement@ODBC_STATEMENT@@QEAAHPEBD@Z
; public: short __cdecl ODBC_PARAMETER::QueryCType(void)const  __ptr64
?QueryCType@ODBC_PARAMETER@@QEBAFXZ
; public: __int64 __cdecl ODBC_PARAMETER::QueryCbValue(void)const  __ptr64
?QueryCbValue@ODBC_PARAMETER@@QEBA_JXZ
; public: __int64 & __ptr64 __cdecl ODBC_PARAMETER::QueryCbValueRef(void) __ptr64
?QueryCbValueRef@ODBC_PARAMETER@@QEAAAEA_JXZ
; public: int __cdecl ODBC_STATEMENT::QueryColNames(class STR * __ptr64 * __ptr64,unsigned long * __ptr64,unsigned long,int * __ptr64) __ptr64
?QueryColNames@ODBC_STATEMENT@@QEAAHPEAPEAVSTR@@PEAKKPEAH@Z
; public: short __cdecl ODBC_CONNECTION::QueryErrorCode(void)const  __ptr64
?QueryErrorCode@ODBC_CONNECTION@@QEBAFXZ
; public: short __cdecl ODBC_STATEMENT::QueryErrorCode(void)const  __ptr64
?QueryErrorCode@ODBC_STATEMENT@@QEBAFXZ
; public: __int64 __cdecl ODBC_PARAMETER::QueryMaxCbValue(void)const  __ptr64
?QueryMaxCbValue@ODBC_PARAMETER@@QEBA_JXZ
; public: unsigned short __cdecl ODBC_PARAMETER::QueryParamNumber(void)const  __ptr64
?QueryParamNumber@ODBC_PARAMETER@@QEBAGXZ
; public: short __cdecl ODBC_PARAMETER::QueryParamType(void)const  __ptr64
?QueryParamType@ODBC_PARAMETER@@QEBAFXZ
; public: unsigned long __cdecl ODBC_PARAMETER::QueryPrecision(void)const  __ptr64
?QueryPrecision@ODBC_PARAMETER@@QEBAKXZ
; public: int __cdecl ODBC_STATEMENT::QueryRowCount(__int64 * __ptr64) __ptr64
?QueryRowCount@ODBC_STATEMENT@@QEAAHPEA_J@Z
; public: short __cdecl ODBC_PARAMETER::QueryScale(void)const  __ptr64
?QueryScale@ODBC_PARAMETER@@QEBAFXZ
; public: short __cdecl ODBC_PARAMETER::QuerySqlType(void)const  __ptr64
?QuerySqlType@ODBC_PARAMETER@@QEBAFXZ
; public: void * __ptr64 __cdecl ODBC_PARAMETER::QueryValue(void)const  __ptr64
?QueryValue@ODBC_PARAMETER@@QEBAPEAXXZ
; public: int __cdecl ODBC_STATEMENT::QueryValuesAsStr(class STR * __ptr64 * __ptr64,int * __ptr64) __ptr64
?QueryValuesAsStr@ODBC_STATEMENT@@QEAAHPEAPEAVSTR@@PEAH@Z
; public: int __cdecl ODBC_CONNECTION::SetConnectOption(unsigned short,unsigned __int64) __ptr64
?SetConnectOption@ODBC_CONNECTION@@QEAAHG_K@Z
; public: int __cdecl ODBC_PARAMETER::SetValueBuffer(long,long) __ptr64
?SetValueBuffer@ODBC_PARAMETER@@QEAAHJJ@Z
; public: static int __cdecl ODBC_CONNECTION::Success(short)
?Success@ODBC_CONNECTION@@SAHF@Z
; private: void __cdecl LOGGING::Unlock(void) __ptr64
?Unlock@LOGGING@@AEAAXXZ
DllCanUnloadNow
DllGetClassObject
DllRegisterServer
DllUnregisterServer
