125{
127
128 StringBuilder filename = _name
129#ifdef __DCL_DEBUG
131#elif defined(_DEBUG)
133#endif
134 ;
135
136 filename +=
137#if __DCL_WINDOWS
139#else
141#endif
142 ;
143
144 int flags = Dll::DEFAULT
145 #ifdef RTLD_LAZY
146 | RTLD_LAZY
147 #endif
148 ;
149
150 try {
151 Dll::open(filename.toString(), flags);
152 }
153 catch (Exception* cause) {
154 throw new SQLDriverException(_name, cause);
155 }
156
157 try {
158 SQL::DRIVER_MODULE* pEntryPoint =
NULL;
159 try {
160 pEntryPoint = (SQL::DRIVER_MODULE*)getAddress(
162 }
163 catch (Exception* cause) {
164 throw new SQLDriverException(_name, cause);
165 }
166
167 if (pEntryPoint->
uSize !=
sizeof(SQL::DRIVER_MODULE)) {
168 throw new SQLDriverException(_name,
169 SQLDriverException::eInvalidDriverModule);
170 }
171
174 throw new SQLDriverException(_name,
175 SQLDriverException::eInvalidDriverModule);
176 }
177
179 throw new SQLDriverException(_name,
180 SQLDriverException::eInvalidVersion);
181 }
182
186 throw new SQLDriverException(_name,
187 SQLDriverException::eInvalidDriverModule);
188 }
189
191 throw new SQLDriverException(_name,
192 SQLDriverException::eInitializeFail
193 );
194 }
195
198
200 _name.data(),
201 filename.data(),
203 );
204 }
205 catch (Exception* e) {
206 try {
207 Dll::close();
208 }
209 catch (Exception* _nt) {
211 }
212 throw e;
213 }
214}
#define DCL_DSO_ENTRY_POINT_STRING
#define __DCL_TRACE3(fmt, arg1, arg2, arg3)
Connection *(* pfnCreateConnectionInstance)()