|Anonymous | Login | Signup for a new account||2019-11-22 12:04 UTC|
|My View | View Issues | Change Log | Roadmap | Doomseeker Issue Support Ranking | Rules | My Account|
|View Issue Details|
|ID||Project||Category||View Status||Date Submitted||Last Update|
|0003706||Doomseeker||[All Projects] Bug||public||2019-08-28 17:58||2019-10-06 08:56|
|Target Version||1.4||Fixed in Version|
|Summary||0003706: Non-ASCII characters in path prevent the plugins from being loaded on Windows|
|Description||Plugins from the /engines/ directory are not being loaded correctly on Windows when Doomseeker is in a path with non-ASCII characters.|
Doomseeker properly detects the presence of the DLL files but it appears that the LoadLibrary() WinAPI function has problem with actually opening the DLL.
|Steps To Reproduce||1. Put Doomseeker in a path with non-ASCII characters in it, such as C:\ąść\doomseeker\|
2. Run C:\ąść\doomseeker\doomseeker.exe
3. Discard the failure to load the plugins error (if any) and inspect logs.
This has turned out to be an easy fix, just needed to change LoadLibrary() to LoadLibraryW():https://bitbucket.org/Doomseeker/doomseeker/commits/66e3062320b4dc6d52525dcd4f964228f07657d1 [^]
Update with this fix is available on the beta auto-update channel.
|While that fix is probably just fine, is there a chance that we should be adding some flag to compile Doomseeker in Unicode mode?|
edited on: 2019-09-02 16:19
From what I see the `A` variant of LoadLibrary() can also work if the string is converted to a local 8-bit string rather than to UTF-8:
In regards to your question, from what I can discern the "Character Set" compiler flag in the MSVC actually controls only whether a `#define _UNICODE` is implicitly added. This #define, in turn, controls whether the various WinAPI #defines resolve to the `A` or the `W` variant. In this case: `LoadLibrary` is a preprocessor macro that can either resolve to `LoadLibraryA` or `LoadLibraryW`. If you pass to it a TCHAR string (another macro that expands to char or wchat_t) you can control the ANSI or widestring variants with a compiler flag. In Doomseeker I simply explicitly chose to use the widestring variant.
Nevertheless, I missed an important remark in MSDN that states that backslashes should be used in the path instead of forward slashes. So, adjustment for that is here:https://bitbucket.org/Doomseeker/doomseeker/commits/a4dfeee1abefddfcec79aee55f0405c92866adff [^]
Moreover, this exists:https://doc.qt.io/qt-5/qlibrary.html [^]
Unless QLibrary will bring back 0003401, we should consider using that instead of the native API functions.
QLibrary seems to do the job very well in regards to loading the plugin DLLs and also it hides the Windows pop-up messages by default. Therefore I've removed all of the OS #ifdefs and Windows specific code from pluginloader.cpp:
|Only registered users can voice their support. Click here to register, or here to log in.|
|Supporters:||No one explicitly supports this issue yet.|
|Opponents:||No one explicitly opposes this issue yet.|
|2019-08-28 17:58||Zalewa||New Issue|
|2019-08-29 19:23||WubTheCaptain||Status||new => acknowledged|
|2019-08-30 16:20||Zalewa||Assigned To||=> Zalewa|
|2019-08-30 16:20||Zalewa||Status||acknowledged => assigned|
|2019-08-30 16:39||Zalewa||Note Added: 0021014|
|2019-08-30 16:39||Zalewa||Status||assigned => needs testing|
|2019-09-02 07:36||Blzut3||Note Added: 0021015|
|2019-09-02 16:18||Zalewa||Note Added: 0021016|
|2019-09-02 16:19||Zalewa||Note Edited: 0021016||View Revisions|
|2019-10-06 08:56||Zalewa||Note Added: 0021056|
Questions or other issues? Contact Us.
|Copyright © 2000 - 2019 MantisBT Team|