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" | ... | ... |