Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1418 / 13645 ツリー ←次へ | 前へ→

【74608】unlha32.dll 存在確認について nh 13/8/7(水) 11:26 質問[未読]
【74609】Re:unlha32.dll 存在確認について kanabun 13/8/7(水) 12:03 発言[未読]
【74611】Re:unlha32.dll 存在確認について こたつねこ 13/8/7(水) 12:49 発言[未読]
【74610】Re:unlha32.dll 存在確認について kumatti 13/8/7(水) 12:41 回答[未読]
【74612】Re:unlha32.dll 存在確認について nh 13/8/7(水) 15:28 お礼[未読]
【74613】Re:unlha32.dll 存在確認について Blue 13/8/7(水) 16:53 発言[未読]
【74614】Re:unlha32.dll 存在確認について Abyss 13/8/7(水) 18:18 発言[未読]
【74615】Re:unlha32.dll 存在確認について nh 13/8/7(水) 19:05 質問[未読]
【74616】Re:unlha32.dll 存在確認について kumatti 13/8/7(水) 19:21 回答[未読]
【74617】Re:unlha32.dll 存在確認について nh 13/8/7(水) 19:28 お礼[未読]

【74608】unlha32.dll 存在確認について
質問  nh  - 13/8/7(水) 11:26 -

引用なし
パスワード
   vbaでlzh圧縮する処理は作ったんですが、unlha32.dllがPCに
入っていないとこの処理が出来ませんよね。
それでunlha32.dllの存在確認ってdir関数で例えば
dir(c:\windows\syste32\unlha32.dll,vbnormal)
ですか?
システムフォルダを覗いたりするのってどうかなって思うんですが、
他に存在確認の方法ってありませんか?

【74609】Re:unlha32.dll 存在確認について
発言  kanabun  - 13/8/7(水) 12:03 -

引用なし
パスワード
   ▼nh さん:

Dirでいいんじゃないですか?
ただしパス名をミスっては 存在確認できませんよ

  Dim f As String
  f = Environ$("windir") & "\system32\unlha32.dll"
  Debug.Print f
  f = Dir$(f)
  If Len(f) > 0 Then
    MsgBox "あります"
  Else
    MsgBox "ありません"
  End If

または

  Dim f As String
  Dim ok As Boolean
  f = Environ$("windir") & "\system32\unlha32.dll"
  
  With CreateObject("Scripting.FileSystemObject")
    ok = .FileExists(f)
  End With
  If ok Then
    MsgBox "あります"
  Else
    MsgBox "ありません"
  End If


>システムフォルダを覗いたりするのってどうかなって思うんですが、
>他に存在確認の方法ってありませんか?

覗くのだめって? 覗く以外にどういう方法があるのだろ?

【74610】Re:unlha32.dll 存在確認について
回答  kumatti  - 13/8/7(水) 12:41 -

引用なし
パスワード
   ▼nh さん:
LoadLibrary API を使うとか。
  If LoadLibrary("UNLHA32.DLL") = 0 Then
    MsgBox "ありません!"
  End If

【74611】Re:unlha32.dll 存在確認について
発言  こたつねこ  - 13/8/7(水) 12:49 -

引用なし
パスワード
   老婆心かも知れませんが、dllの検索先をsystem32に
限定して本当に大丈夫ですか?
system32に必ずインストールされる保証はないと思い
ますが。。。

私なら、apiのloadlibraryでload出来るかチェックする事を
お勧めします。

【74612】Re:unlha32.dll 存在確認について
お礼  nh  - 13/8/7(水) 15:28 -

引用なし
パスワード
   ▼kumatti さん:
>▼nh さん:
>LoadLibrary API を使うとか。
>  If LoadLibrary("UNLHA32.DLL") = 0 Then
>    MsgBox "ありません!"
>  End If


Public Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" ( _
   ByVal lpLibFileName As String) As Long


If LoadLibrary("UNLHA32.DLL") <> 0 Then
  〜〜〜〜〜
Else
 MsgBox "UNLHA32.DLLが見つからず、よって解凍出来ません。処理を中止します", vbOKOnly
 Exit Sub
End If


こたつねこさん、kumattiさん、kanabunさん、レスありがとうございます。
上のようにすることで存在確認ができました。ありがとうございます。

【74613】Re:unlha32.dll 存在確認について
発言  Blue  - 13/8/7(水) 16:53 -

引用なし
パスワード
   FreeLibraryってやんなくても問題ないんだっけ?

Dim hDLL As Long

hDLL = LoadLibrary("UNLHA32.DLL")
If hDLL <> 0 Then
  FreeLibrary hDLL
  〜〜〜〜〜
Else
 MsgBox "UNLHA32.DLLが見つからず、よって解凍出来ません。処理を中止します", vbOKOnly
 Exit Sub
End If

【74614】Re:unlha32.dll 存在確認について
発言  Abyss  - 13/8/7(水) 18:18 -

引用なし
パスワード
   Blueさんの仰る通り、
LoadLibraryは成功した場合にプロセス参照カウンターが
一つ増えますから、あと片づけが必要ですね。

【74615】Re:unlha32.dll 存在確認について
質問  nh  - 13/8/7(水) 19:05 -

引用なし
パスワード
   ▼Abyss さん:
>Blueさんの仰る通り、
>LoadLibraryは成功した場合にプロセス参照カウンターが
>一つ増えますから、あと片づけが必要ですね。

 すいません、教えてくださいm(__)m

Public Declare Function FreeLibrary Lib "kernel32" ( _
   ByVal hLibModule As Long) As Long

モジュールの先頭でこのように定義したんですが、これって戻り値は
Long型ですよね?

んで処理終了後に
ret = FreeLibrary("UNLHA32.DLL") 'retはLong型
とすると
この部分で型が一致しません
でエラーに成ってしまいます。
後片付けとしてFreeLibrayが必要とのことですが、ここはどのように書けばいいのでしょうか?

【74616】Re:unlha32.dll 存在確認について
回答  kumatti  - 13/8/7(水) 19:21 -

引用なし
パスワード
   Blueさんのコードをご覧になれば分かると思います。
#各位ご指摘ありがとうございました。m(_ _)m

余談) 動的にAPIを呼び出す事も出来ますね。
ht tp://codezine.jp/article/detail/6780

【74617】Re:unlha32.dll 存在確認について
お礼  nh  - 13/8/7(水) 19:28 -

引用なし
パスワード
   ▼kumatti さん:
>Blueさんのコードをご覧になれば分かると思います。
>#各位ご指摘ありがとうございました。m(_ _)m
>
>余談) 動的にAPIを呼び出す事も出来ますね。
>ht tp://codezine.jp/article/detail/6780


皆様、ありがとうございました。

1418 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free