124{
126
127 StringBuilder filename = _name
128#ifdef __DCL_DEBUG
130#elif defined(_DEBUG)
132#endif
133 ;
134
135 filename +=
136#ifdef __WINNT__
138#elif defined(__APPLE__)
140#else
142#endif
143 ;
144
145 int flags = Dll::DEFAULT
146 #ifdef RTLD_LAZY
147 | RTLD_LAZY
148 #endif
149 ;
150
151 try {
152 Dll::open(filename.toString(), flags);
153 }
154 catch (Exception* _cause) {
155 throw new SQLDriverException(_name, _cause);
156 }
157
158 try {
159 SQL::DRIVER_MODULE* entryPoint =
NULL;
160 try {
161 entryPoint = (SQL::DRIVER_MODULE*)getAddress(
163 }
164 catch (Exception* _cause) {
165 throw new SQLDriverException(_name, _cause);
166 }
167
168 if (entryPoint->
uSize !=
sizeof(SQL::DRIVER_MODULE)) {
169 throw new SQLDriverException(_name,
170 SQLDriverException::eInvalidDriverModule);
171 }
172
175 throw new SQLDriverException(_name,
176 SQLDriverException::eInvalidVersion);
177 }
178
182 throw new SQLDriverException(_name,
183 SQLDriverException::eInvalidDriverModule);
184 }
185
187 throw new SQLDriverException(_name,
188 SQLDriverException::eInitializeFail
189 );
190 }
191
194
196 _name.data(),
197 filename.data(),
199 );
200 }
201 catch (Exception* e) {
202 try {
203 Dll::close();
204 }
205 catch (Exception* _nt) {
207 }
208 throw e;
209 }
210}
#define DCL_DSO_ENTRY_POINT_STRING
#define __DCL_TRACE3(fmt, arg1, arg2, arg3)
#define __VERSION_MAJOR_MINOR(_x)
Connection *(* pfnCreateConnectionInstance)()