電子書籍の厳選無料作品が豊富!

  質問に追記をしたいので新設してもう一度質問をしました。
プラットフォームはVS.NET2005でC++で記述しています。 OSはWindows XP SP3です。
自分で作成したDLLを読み込むためにLoadLibrary関数でDLLを読み込んだハズなんですがエラーになり、エラー値126で、指定したモジュールがありません と出ます。

たしかに指定したフォルダにDLLがあるはずなんですが。
DLLの方は実は.NET2003で作られたDLLです。
しかし2003でも2005でも関係なくDLLは読み込まないようです。 ただ、.NET2003からコンバートしたソリューションだと正常にdllファイルを読み込んでいます。 NET2005で新規作成でプロジェクトを作り、そこの.cppファイルからdllファイルを読み込ませようとすると失敗します。

一つ気になるのが、Microsoftのホームページの以下のアドレスでその事に関する対策が載っているようです
http://support.microsoft.com/kb/891401/ja

この問題を解決するには、最新バージョンの Windows スクリプト ホストを使用してコンピュータを更新します。これを行うには、次のマイクロソフト Web サイトを参照してください。
解決方法としてこのように載っていますが、リンク先がありません。

何かしらどこかにリンク先がないでしょうか?
もしくはこの問題を解決できる方法はありませんか?
質問でもなんでもいいので解答ください。 m( )m
どうかよろしくお願いいたします。

A 回答 (3件)

コンバートしたプロジェクトでうまく読み込めるなら、そのプロジェクトで作成した実行ファイルとdllファイルを、開発環境が入っていないマシン(必要であればVirtualPCやVMWareなどで作成して)でちゃんと動作するか確認してみては?


ランタイムや他のdllが必要であれば、それらをインストールやコピーしないと動作しなくなるので、必要なものが確認できます。

あと、コンバートしたプロジェクトと新規のプロジェクトの違いというと、UNICODEを使用するか否かという部分が大きいと思いますが、その辺は影響しませんか? UNICODEを使用するプロジェクトであれば、LoadLibraryに渡すファイル名もUNICODEにする必要があります。

もう1つ、チェックするとすれば、dllファイルの場所をフルパスで記述してみるとか。
以前、読み込むdllの場所によって、セキュリティの問題が発生したことがあって、何らかの対策が追加されているかもしれません。

この回答への補足

>LoadLibraryに渡すファイル名もUNICODEにする必要があります。
Unicode文字に対応するということでしょうか?
プロジェクトのプロパティでUnicode文字からマルチバイト文字に変更して
デバッグをやっています。
Unicode文字じゃないとエラーが多く出て実行できないんでマルチバイト文字セットを使用するにしました。
DLLでもそうです。

補足日時:2011/07/12 12:23
    • good
    • 0
この回答へのお礼

 解答ありがとうございます。
dllのフルパスを試してみます。

お礼日時:2011/07/12 12:23

提示されたリンクの内容は、



「アプリケーションを作成しようとすると、アプリケーションが正常に作成されず、次のようなエラー メッセージが表示されることがあります。」

なので、VisualStudioが正常に動作しない場合の対処方法です。
今回の問題とは違う内容でしょう。

dllファイルの読み込みに失敗する場合、そのdllファイルだけでなく、dllファイルが読み込む別のdllファイルの存在の有無も影響します。
Depnedency Wakerなどで依存関係をチェックしてみてはいかがでしょうか。
    • good
    • 0
この回答へのお礼

解答ありがとうございます。

dependswalkerで調べてみたところ、そのDLLにリンクしているDLLの一部がない(EFSADU.DLL WER.DLL IESHIMS.DLL)と言われますが.NET2003では動いてますよね^^; DLLリンクに問題ないDLLでもやはり読み込みません。

.NET2003のRuntime(CRT)が入っていないと指摘されたことがあるのですが
そうなのでしょうか?
NET2003のRuntime(CRT)というのは今は調べているところです。

お礼日時:2011/07/12 10:40

script 5.7で良いなら、マイクロソフトからダウンロード。


http://support.microsoft.com/kb/949140/ja

ざっと追っかけた感じだと、regsvr32で済みそうな。
    • good
    • 0
この回答へのお礼

マイクロソフトでダウンロードして試したら、もう必要ないというエラーがでました。
どうやらもうアップデートされているようです。
regsvr32でDLLをどのようにするのでしょうか?
regsvr32はDLLをレジストリ登録して使用するとあるのですが。
自分が使っているDLLはレジストリ登録は必要ない状況です。

あと説明の追記をしておきます。 DLL関連の追記です。
DLLは MFC・ATCは使っていません。 .FrameWorkもです。
利用側のEXEも使用していません。

お礼日時:2011/07/12 10:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!