Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 11 Pro : Microsoft 365)
nkf32.dll をAcccessのVBAが見つけられません。
投稿日時: 23/06/13 20:38:28
投稿者: suekun9999

windows11
Acccess365(2019)
64bit
 
環境ですが、
Declare PtrSafe Sub Nkf Lib "nkf32.dll" (ByVal outStr As String)
と定義して、Windowsフォルダにdllを置いて、再起動しているのですが
「nkf.dllが見つかりません。」をなってしまいます。
 
ご教示をお願い申し上げます。

回答
投稿日時: 23/06/14 11:28:35
投稿者: Suzu

引用:
nkf32.dll
調べてみると 32bit
 
OS も、Access も 64bitなのでしょうか?
 
条件付きコンパイル(32ビット64ビットの互換性)
https://excel-ubara.com/excelvba4/EXCEL269.html
 
を参考にどうぞ。
 
 
 
あくまで見つからない と言う事であれば
引用:
Windowsフォルダにdllを置いて

 
この Windowsフォルダは具体的には何処のパスですか?
そのパスが、環境変数 %PATH% で取得できるパスですか?
フルパスで指定するとどうですか?
 
Daclare文のDLL検索フォルダを指定する
https://qiita.com/mmYYmmdd/items/fc1d3cce6a39771c0f36

投稿日時: 23/06/14 19:17:24
投稿者: suekun9999

お世話になっております。
「dllをWindowsフォルダに置いて」としておりましたが、
Windows\System

Windows\System32
の両方に置いてみましたが、やはり見つかりません。

投稿日時: 23/06/14 19:19:16
投稿者: suekun9999

お世話になっております。
 
実際には、
下記の2文になります。
longでなく、stringなのですが、この場合はどのようにコーディングしたらよろしいでしょうか?
 
Declare PtrSafe Sub SetNkfOption Lib "nkf32.dll" (ByVal outStr As String)
Declare PtrSafe Sub NkfConvert Lib "nkf32.dll" (ByVal outStr As String, ByVal inStr As String)

投稿日時: 23/06/14 19:19:47
投稿者: suekun9999

suekun9999 さんの引用:
お世話になっております。
「dllをWindowsフォルダに置いて」としておりましたが、
Windows\System

Windows\System32
の両方に置いてみましたが、やはり見つかりません。

投稿日時: 23/06/14 19:20:09
投稿者: suekun9999

suekun9999 さんの引用:
お世話になっております。
 
実際には、
下記の2文になります。
longでなく、stringなのですが、この場合はどのようにコーディングしたらよろしいでしょうか?
 
Declare PtrSafe Sub SetNkfOption Lib "nkf32.dll" (ByVal outStr As String)
Declare PtrSafe Sub NkfConvert Lib "nkf32.dll" (ByVal outStr As String, ByVal inStr As String)

回答
投稿日時: 23/06/15 16:32:20
投稿者: Suzu

システムフォルダは
 
32ビット C:\Windows\SysWOW64
64ビット C:\Windows\System32
 
です。
 
 

引用:
実際には、下記の2文になります。
longでなく、stringなのですが、この場合はどのようにコーディングしたらよろしいでしょうか?

???
何が Long でなく、String?
 
 
10分もしないうちに催促の様に連投されても、いつも見ている訳ではありませんので、対応できません。
他にスレッドを建てられた様ですし、当方はここまでにします。

投稿日時: 23/06/15 21:20:27
投稿者: suekun9999

Suzu 様
 
コメントの仕方が悪く申し訳ございません。
追記したかったのを、お礼で出たため、書き直したためです。
 
もう一つのスレッドは削除します。
 
stringの箇所は以下の通りです。
 
Declare PtrSafe Sub SetNkfOption Lib "nkf32.dll" (ByVal outStr As String)
Declare PtrSafe Sub NkfConvert Lib "nkf32.dll" (ByVal outStr As String, ByVal inStr As String)
 
何卒よろしくお願い申し上げます。

回答
投稿日時: 23/06/16 12:58:59
投稿者: Suzu

ちょっと、すぐには回答できない状態です。
 
システムフォルダパスについてはどうでしょうか?

投稿日時: 23/06/16 14:56:34
投稿者: suekun9999

C:\Windows\SysWOW64
C:\Windows\System32
 
環境変数のPATHに追加して再起動しましたが
結果は、やはり「見つかりません。」
です。

回答
投稿日時: 23/06/16 17:30:21
投稿者: Suzu

ちょっと良く判りません。
 
環境 変数 PATH に
C:\Windows\SysWOW64
C:\Windows\System32
を両方追加した上で、
 
両方のフォルダに nkf32.dll がある状態で
どの様なコードを実行すると、「見つかりません」となるのですか?
 
 
 

引用:
longでなく、stringなのです

引用:
stringの箇所は以下の通りです。
  
Declare PtrSafe Sub SetNkfOption Lib "nkf32.dll" (ByVal outStr As String)
Declare PtrSafe Sub NkfConvert Lib "nkf32.dll" (ByVal outStr As String, ByVal inStr As String)

 
引数は、全部 String になっています。
何が Long ではなく、何が String なのか、全く理解できません。

回答
投稿日時: 23/06/16 20:18:53
投稿者: MMYS

Accsess2019 32ビット版 とAccsess2019 64ビット版 は全く別のアプリです。違いはメモリ空間です。
・32ビット版はメモリ空間が、32bit
・64ビット版はメモリ空間が、64bit
 
メモリを指定する際、アドレス指定が、
・32ビット版では、アドレス指定が、32ビット
・64ビット版では、アドレス指定が、64ビット
です。当然、ポインターなど、それぞれのビットが必要。以上の事から、メモリ空間に互換性がありません。
 
つまり、64ビット版アプリからから、32bitDLLは呼び出せないはずです。
 
VBAのコードでは、PtrSafeなどを付加するだけですが、32ビット版アプリでは、32ビット版DLLを、64ビット版アプリでは、64ビット版DLLを呼び出すはずです。
標準で用意されているDLLは、32ビット版・64ビット版それぞれ専用のものが用意されているはずです。
 
 

投稿日時: 23/06/16 21:29:22
投稿者: suekun9999

ありがとうございます。
 
nkf32.dllは、64bit版が無い模様です。

投稿日時: 23/06/16 21:31:14
投稿者: suekun9999

条件付きコンパイル(32ビット64ビットの互換性)
https://excel-ubara.com/excelvba4/EXCEL269.html
 
のサンプルソースでは、longのみのご説明だったため
stringの場合はどのようにしたらよいかと思い投稿いたしました。

回答
投稿日時: 23/06/17 17:00:05
投稿者: Suzu

suekun9999 さんの引用:
条件付きコンパイル(32ビット64ビットの互換性)
https://excel-ubara.com/excelvba4/EXCEL269.html
 
のサンプルソースでは、longのみのご説明だったため
stringの場合はどのようにしたらよいかと思い投稿いたしました。

 
LONG の場合、変える必要があるが、それ以外は、変えません。
 
 
VBA 64ビット版Excel対応 7-zip64.dll
https://www.kurumico.com/excel-vba-zipfile-api/9964/
 
 
nkf32.dl が 64it では動かいのであれば、ダメでしょうね。
 
 
そもそも、何で nkf32.dlが必要なのでしょうか?

投稿日時: 23/06/17 19:48:24
投稿者: suekun9999

ありがとうございました。
 
今回は、32bit版のAccessで対応することとなりました。
ご質問方法が悪く、大変ご迷惑をおかけしました。
申し訳ございません。
 
大変勉強になりました。
今後ともよろしくお願い申し上げます。