LoadUnlhaDll に失敗するNo.02680
dszhm さん 17/12/22 11:05
 
OS:Win 7 Pro SP1 64bit
エディタ:8.75 64bit Float
メール:6.75 64bit
です。

題記の通り、LoadUnlhaDll に失敗します。
おそらく、Win 7 が 64bit 版ということで、インストーラが

C:\Windows\SysWow64

にインストールするのですが、
LoadUnlhaDll は、

C:\Windows\System32

を検索するのだと思います。
どう対策したらいいでしょうか?

64bit の win 下で、32bit の DLL を

C:\Windows\System32

に入れるのは、少し?怖いので避けたいです。

[ ]
RE:02680 LoadUnlhaDll に失敗するNo.02682
秀まるお2 さん 17/12/22 12:57
 
 調べてみたら、LoadUnlhaDllの中でやってるのは、WindowsのAPIである「LoadLibr
ary」関数に、普通に"Unlha32.dll"を渡してロードしてるだけでした。

        hmodUnlha = LoadLibrary( "unlha32.dll" );

 みたいな処理になってました。この場合、環境変数の"path"が通ってるフォルダか、
Windowsのシステムフォルダかにdllが無いとロードに失敗するようです。

 Windows7の64bit版だと、環境変数のpathには"c:\Windows\SysWow64"は入ってない
ようで、それでエラーになるようです。たしかに32bitのdllがpathの中にあることは
普通無いので、これはこれでそういう物になってしまいます。

 回避策としてどうするかですが・・・

 とりあえず、Unlha32.dllの存在してるはずのフォルダをちゃんと特定してロード
するように直してみます。

 次、たぶん正式版になると思うんですが、一応その正式版に入れてしまおうと思い
ます。(もしかしたらまたβ出すかもしれませんが)

[ ]
RE:02682 LoadUnlhaDll に失敗するNo.02684
秀まるお2 さん 17/12/23 16:00
 
 こちらでテストしてみたら、こちらのWindows7 64bit環境だとエラーにならないよ
うでした。

 LoadLibraryで、C:\windows\syswow64のフォルダをちゃんと探して、そこにあるdl
lをロードしてるれるようです。

 うまくいかない理由として考えられるのは、C:\Windows\SysWOW64配下にUNLHA32.D
LLが無いケースくらいしか無さそうな気がします。

 64bit版Windows上で32bit版アプリを動かして、その中で、例えば極端な話、

    hmod = LoadLibrary( "C:\\Windows\\system32\\xxxx.dll";

 みたいにやっても、自動的に「system32」から「SysWOW64」に変換されたdllを
ロードするような、そういう仕組みがあるようです。なので普通は大丈夫なはずだと
思います。


 たしかにC:\Windows\SysWOW64配下にUNLHA32.DLLがあるかどうか、今一度確認して
みて欲しいです。

 あと、テストする方法として、たとえば

    loaddll "c:\\windows\\system32\\unlha32.dll";
    if( !result ) {
        message "ロード失敗";
    } else {
        message "ロード成功";
    }

 みたいなマクロで確認できます。僕の所では上記マクロも成功します。

 秀丸メールは32bit版です。もしかして64bit版だとダメですけども。

[ ]
RE:02684 LoadUnlhaDll に失敗するNo.02685
dszhm さん 17/12/24 18:34
 
>うまくいかない理由として考えられるのは、
>C:\Windows\SysWOW64配下にUNLHA32.DLLが無いケースくらいしか無さそうな気がし
>ます。

エクプローラーで、開いて目視での確認ですが、有ります。

> 64bit版Windows上で32bit版アプリを動かして、その中で、例えば極端な話、
>
>    hmod = LoadLibrary( "C:\\Windows\\system32\\xxxx.dll";
>
> みたいにやっても、自動的に「system32」から「SysWOW64」に変換されたdllを
>ロードするような、そういう仕組みがあるようです。なので普通は大丈夫なはずだ
>と思います。

えっと、最初の投稿に書きましたが、
>64bit版Windows上で32bit版アプリ
ではなく、
64bit版Windows上で、
秀丸(エディタ、メール、共)64bit版
なのです。
> たしかにC:\Windows\SysWOW64配下にUNLHA32.DLLがあるかどうか、今一度確認し
>てみて欲しいです。

 $msgs = "";
 loaddll "c:\\windows\\system32\\unlha32.dll";
 if( !result )
 {
  $msgs = $msgs + "System32 ロード失敗";
 }
 else
 {
  $msgs = $msgs + "System32 ロード成功";
 }

 $msgs = $msgs + "\n";
 loaddll "c:\\windows\\syswow64\\unlha32.dll";
 if( !result )
 {
  $msgs = $msgs + "SysWow64 ロード失敗";
 }
 else
 {
  $msgs = $msgs + "SysWow64 ロード成功";
 }

 message $msgs;

で、テストしてみると、
---------------------------
秀丸エディタ
---------------------------
System32 ロード失敗
SysWow64 ロード成功
---------------------------
OK  
---------------------------
となります。

[ ]
RE:02685 LoadUnlhaDllに失敗するNo.02686
h-tom さん 17/12/24 20:41
 

h-tom です。

ようは、
> 秀丸メールは32bit版です。もしかして64bit版だとダメですけども。
と言うことです。

Unlha32.DLL, Zip32J.DLL の 64bit版は存在していませんし、
64bit版 TKInfo.dll から、32bit版 Unlha32.DLL はロードできません。

現状、64bit版では、
「Unlha32.DLL, Zip32J.DLL呼び出し関数」
は実行出来ないと言うことです。

64bit DLLで、32bitプロセス起動し、統合アーカイバ系の32bit DLL を
呼び出すものもありますけどね。
64bit版の場合、run文で、外部ソフト使った方が手っ取り早いでしょう。

[ ]
RE:02686 LoadUnlhaDllに失敗するNo.02687
秀まるお2 さん 17/12/24 22:51
 
 最初にちゃんと、秀丸メールが64bit版と書いてありました。完全に見てませんで
した。大変失礼しました。

 ヘルプの記述が32bit/64bitのことについて何も書いてないのが悪いですが、h-tom
さんの話の通りでして、64bit版の秀丸メールでは32bit版のUNLHA32.DLLをロードす
ることは出来ないです。

 基本的に、「DLL」については、32bit版アプリからは32bit版のDLLしかロードでき
ないです。

> 64bit版の場合、run文で、外部ソフト使った方が手っ取り早いでしょう。

 現状で、秀丸メールの種類が32bitでも64bitでも関係無く圧縮する手段として一番
お勧めなのは、7zipを呼び出すやり方になりまして、

    http://hide.maruo.co.jp/lib/tkmacro/attachcompress-7zip-v3.html

 が一番お勧めです。

 あと、ヘルプの方は、64bit版の秀丸メールからは現状(UNLHA32.DLLの64bit版が
出ない限り)使えないって記述を追加させていただきます。

[ ]
RE:02687 LoadUnlhaDllに失敗するNo.02688
秀まるお2 さん 17/12/24 22:55
 
補足ですが、

> 基本的に、「DLL」については、32bit版アプリからは32bit版のDLLしかロードで
>きないです。

 32bit版アプリからは32bit版のDLLのみ、
 64bit版アプリからは64bit版のDLLのみしかロードできない。

です。

 ちなみに秀丸エディタの64bit版のloaddllでは32bit版のDLLが制限付きながらロー
ドできるので話がややこしいのですが、こっちの場合は、64bit版から別途32bitのダ
ミープロセスを1つ起動して、そこでDLLをロードして、64bit版の秀丸エディタから
32bitのダミープロセスに関数呼び出しパラメータをプロセス間通信で渡す、みたい
な非常にややこしいことをしていたりします。その辺の機能は、すみませんが秀丸
メール側では対応してないです。

[ ]