LoadLibraryで長いパスの場合失敗する – 固定ページ 2 – プログラミング – Home

LoadLibraryで長いパスの場合...
 
通知
すべてクリア

[解決済] LoadLibraryで長いパスの場合失敗する

固定ページ 2 / 2

ロマ
 ロマ
(@ロマ)
ゲスト
結合: 18年前
投稿: 170
 

暗黙的なリンクでも同様な感じです。

MyApp.exeがMyDll.dllを使用するときにレジストリの
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\MyApp.exeの値
path=c:\long-path\ だとNTさんのLoadLibraryの失敗と同様なことが発生。
path=\\?\c:\long-path\ だと成功。

ただし、dllのフルパス長さは259文字までしか試していません。


返信引用
NT
 NT
(@NT)
ゲスト
結合: 11年前
投稿: 6
Topic starter  

返信遅くなってすみません

>tetrapodさん
丁寧な解説ありがとうございました。
なるほど、/を使うと問題が起きてしまう、という事だったんですね。
やはりWindowsのバグっぽいので、通常のやり方では無理そうですね。

今回はリソースのDLLを読み込むだけだったため、
LoadLibraryEx(path, NULL,
DONT_RESOLVE_DLL_REFERENCES | LOAD_LIBRARY_AS_DATAFILE);
として回避することにしました。

ほかに回避策としては
 ・同階層に置いて相対パスにする
 ・LoadLibraryW()を明示的に使い、パスの先頭に[\\?\]を付ける
ですかね。

>ロマさん
暗黙リンクはあまり使わないのですが、情報ありがとうございます。
こちらでもだめなんですね。

とりあえず、Windowsのバグという事でどうしようもなさそうですし、
回避策も頂いたので解決とします。皆さんありがとうございました。


返信引用
固定ページ 2 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました