GetDllDirectory
дает неоднозначное значение. Когда строка, создаваемая этим вызовом, пуста, это означает одно из следующего:
- никто не звонил
SetDllDirectory
- кто-то передал
NULL
SetDllDirectory
- кто-то передал пустую строку
SetDllDirectory
Первые два случая эквивалентны для моих целей, но третий случай - это проблема. Если я хочу написать код сохранения / восстановления (позвоните GetDllDirectory
, чтобы сохранить «старое» значение, SetDllDirectory
, чтобы временно установить «новое» значение, а затем SetDllDirectory
снова, чтобы восстановить «старое» значение), я рискнуть изменить намерения другого программиста.
Если другой программист намеревался, чтобы текущий рабочий каталог находился в порядке поиска DLL (другими словами, одна из первых двух маркировок верна), и я передаю пустую строку в SetDllDirectory
, я буду принимать текущий рабочий каталог вне порядка поиска DLL, полностью изменяя намерения другого программиста.
Может кто-нибудь предложить подход, чтобы устранить или обойти эту двусмысленность?
P.S. Я знаю, что наличие текущего рабочего каталога в порядке поиска DLL может быть истолковано как дыра в безопасности. Тем не менее, это поведение по умолчанию, и мой код не в состоянии отменить это; мой код должен быть совместим с ожиданиями всех потенциальных абонентов, многие из которых являются большими и старыми и находятся вне моего контроля.