Commit 66d31e1f048e8d90d614c19fbcdabc028c431bc7
1 parent
20f4c5d0
Exists in
master
and in
1 other branch
Fixing load of delayed library.
Showing
3 changed files
with
34 additions
and
39 deletions
Show diff stats
client/src/session/local/session.cc
... | ... | @@ -69,6 +69,8 @@ |
69 | 69 | |
70 | 70 | HANDLE hEventLog = RegisterEventSource(NULL, PACKAGE_NAME); |
71 | 71 | |
72 | + debug(msg," rc=",rc); | |
73 | + | |
72 | 74 | if(hEventLog) { |
73 | 75 | |
74 | 76 | char username[UNLEN + 1]; |
... | ... | @@ -142,8 +144,7 @@ |
142 | 144 | if(!initialized) { |
143 | 145 | |
144 | 146 | // Get application DATADIR |
145 | - | |
146 | - // https://github.com/curl/curl/blob/master/lib/system_win32.c | |
147 | + LSTATUS rc; | |
147 | 148 | |
148 | 149 | char datadir[4096]; |
149 | 150 | HKEY hKey = openKey(); |
... | ... | @@ -155,55 +156,48 @@ |
155 | 156 | |
156 | 157 | unsigned long datatype; // #defined in winnt.h (predefined types 0-11) |
157 | 158 | |
158 | - if(RegQueryValueExA(hKey,"InstallLocation",NULL,&datatype,(LPBYTE) datadir,&datalen) != ERROR_SUCCESS) { | |
159 | + rc = RegQueryValueExA(hKey,"InstallLocation",NULL,&datatype,(LPBYTE) datadir,&datalen); | |
160 | + if(rc != ERROR_SUCCESS) { | |
159 | 161 | |
160 | 162 | // Can't get DATADIR |
163 | + write_log("Can't get Install Location", (int) rc); | |
161 | 164 | |
162 | 165 | *datadir = 0; |
163 | 166 | } |
164 | - | |
165 | 167 | RegCloseKey(hKey); |
166 | 168 | |
167 | 169 | } |
168 | 170 | |
169 | - if(*datadir) { | |
170 | - | |
171 | - HMODULE kernel = | |
172 | - LoadLibrary("kernel32.dll"); | |
173 | - | |
174 | - if(kernel) { | |
175 | - | |
176 | - HANDLE WINAPI (*AddDllDirectory)(PCWSTR) = | |
177 | - (HANDLE WINAPI (*)(PCWSTR)) GetProcAddress(kernel,"AddDllDirectory"); | |
178 | - | |
179 | - //BOOL WINAPI (*RemoveDllDirectory)(HANDLE) = | |
180 | - // (BOOL WINAPI (*)(HANDLE)) GetProcAddress(kernel,"RemoveDllDirectory"); | |
181 | - | |
182 | - if(AddDllDirectory) { | |
183 | - | |
184 | - wchar_t *path = (wchar_t *) malloc(sizeof(datadir)*sizeof(wchar_t)); | |
185 | - mbstowcs(path, datadir, 4095); | |
186 | - | |
187 | - if(!AddDllDirectory(path)) { | |
188 | - write_log("AddDllDirectory has failed"); | |
189 | - } | |
190 | - | |
191 | - free(path); | |
192 | - | |
193 | - } else { | |
194 | - | |
195 | - write_log("Can't find AddDllDirectory@kernel32.dll"); | |
196 | - | |
197 | - } | |
198 | - | |
199 | - FreeLibrary(kernel); | |
171 | +#ifdef DEBUG | |
172 | + debug("Datadir=\"",datadir,"\""); | |
173 | +#endif // DEBUG | |
200 | 174 | |
175 | + if(*datadir) { | |
201 | 176 | |
202 | - } else { | |
177 | + wchar_t *path = (wchar_t *) malloc(sizeof(datadir)*sizeof(wchar_t)); | |
178 | + mbstowcs(path, datadir, 4095); | |
203 | 179 | |
204 | - write_log("Can't load kernel32.dll"); | |
180 | + if(!SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_USER_DIRS)) { | |
181 | + write_log("SetDefaultDllDirectories has failed"); | |
182 | + } | |
183 | +#ifdef DEBUG | |
184 | + else { | |
185 | + debug("SetDefaultDllDirectories has suceeded"); | |
186 | + } | |
187 | +#endif | |
205 | 188 | |
189 | + if(!AddDllDirectory(path)) { | |
190 | + string msg = "Can't add "; | |
191 | + msg += datadir; | |
192 | + msg += " to directory path"; | |
193 | + write_log(msg.c_str()); | |
206 | 194 | } |
195 | +#ifdef DEBUG | |
196 | + else { | |
197 | + debug("AddDllDirectory has suceeded"); | |
198 | + } | |
199 | +#endif | |
200 | + free(path); | |
207 | 201 | |
208 | 202 | } |
209 | 203 | |
... | ... | @@ -215,6 +209,7 @@ |
215 | 209 | #endif // _WIN32 |
216 | 210 | |
217 | 211 | this->hSession = lib3270_session_new(""); |
212 | + | |
218 | 213 | lib3270_set_user_data(this->hSession,(void *) this); |
219 | 214 | setCharSet(lib3270_get_display_charset(this->hSession)); |
220 | 215 | ... | ... |
client/src/testprogram/testprogram.cc
configure.ac
... | ... | @@ -80,7 +80,7 @@ case "$host" in |
80 | 80 | *-mingw32|*-pc-msys) |
81 | 81 | app_cv_osname="windows" |
82 | 82 | CFLAGS="$CFLAGS -D_WIN32_WINNT=0x0600" |
83 | - LIBS="$LIBS -lws2_32 -lwtsapi32 -lcomdlg32" | |
83 | + LIBS="$LIBS -lws2_32 -lwtsapi32 -lcomdlg32 -lkernel32" | |
84 | 84 | LDFLAGS="$LDFLAGS" |
85 | 85 | STATIC_LDFLAGS="-static -static-libgcc -static-libstdc++" |
86 | 86 | DLLEXT=".dll" | ... | ... |