開発言語:VB.NET 2003
OS:WinXp SP3
VB.NETでWNetAddConnection2の関数を読みだすと
「プロシージャエントリポイントwcscat_sがダイナミックリンクライブラリ
ntdll.dllに見つかりませんでした。」と意味不明なエラーが発生して困って
おります。ntdll.dllファイルをネットでダウンロードしたりしてやってみま
したが結果は同じでした。
もしお分かりになるかたいっらしゃいましたらご教授頂けますと嬉しいです。
Declare での、WNetAddConnection2 が間違っているようです。
何と定義していますか?
因みに、なぜまだVB.NET 2003 ? .NET Framework 1.1 しょう?
以上。
>「プロシージャエントリポイントwcscat_sがダイナミックリンクライブラリ
> ntdll.dllに見つかりませんでした。」と意味不明なエラーが発生して
まず、プログラム中で wcscat_s を呼び出している個所はありますか?
あるのなら、文字列連結の際に wcscat_s API を使うことを止めて、かわりに
Marshal クラス等あるいは RtlMoveMemory API を用いて連結させるように
コードを書き換えてみてください。
一方、もしも wcscat_s というコードを使っている個所が無いのだとすれば、
恐らくはそれを WNetAddConnection2 API などが内部的に呼び出しているものと
推測しますが、それが内部エラーになってしまうということは、その OS 環境は
いわゆる「DLL Hell」を引き起こしている可能性が高いと考えられます。
DLL Hell とは、OS の複数のDLL/EXE群のうち、一部の DLL のみが
上位バージョンまたは下位バージョンに置き換わってしまう事によって、
バージョン互換性の不整合を引き起こしている状態を指しています。
# 出所不明のアプリやDLLをインストールしたり、インストーラを使わずに
# 手動コピーするなどの動作により、あるDLLは上位バージョンなのに、
# 対応する別のDLLが下位バージョンのままになっているなど。
Win7 (32bit)版の ntdll.dll や Win7 (64bit)版の ntdll.dll では、
wcscat および wcscat_s という API が公開されていますが、手元の
Windows 2000 や XP版の ntdll.dll を見る限りでは、wcscat という
API 関数ならば公開されているものの、wcscat_s という名前の関数は
公開されていないようでした。
XP 用の ntdll.dll で、wcscat_s を含んでいる物があるかどうかは分かりませんが、
もしも自分で wcscat_s を呼んでいるわけでは無いのなら、OS 環境自体が
不安定な構成になっていそうなので、OS から再インストールしなおすか、
もしくは、新規に用意した検証用の仮想OS等で実行されることをお奨めします。
いずれにせよ、実際に検証可能なコードが提示されているわけでは無いため、
コードの問題なのか環境の問題なのかは判断できませんけれども。
皆さん回答ありがとうございます。
何年も前のソースをメンテナンスしている為、.NET2003機能追加を
しております。
ソースコード中でwcscat_sは使用していない為、おっしゃって頂いた
通りDLLのバージョン相違等で発生しているのかもしれまんせん。
もう少し色々と調べてみようと思います。
どうもありがとうございました。
ツイート | ![]() |