こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Windows7で自作dllを呼び出す方法

 先日の質問(*)の続きですが、自分で自分の質問に補足出来ないのと状況が変わったので別質問にしました。
 (*)EXCEL2010から外部DLLをCall出来ない

状況
 MS社のサイトより評価版のWindows7とoffice2010をダウンロードし新規HDDにインストールして環境を作成した。
 新規作成環境のCドライブにtempフォルダを作る。

 WindowsXPとExcel2003では問題なく動いていたExcel用の外部DLLがc:\tempでは動かなかった。
(ここまでは前回の質問) 

調査結果
 Windows7とExcel2003でも同じ状況、同じエラーを起こす。つまり、問題はexcel2010ではなく、Windows7でした。
 「実行時エラー48 ファイルが見つかりませんC:\Temp\testDll.dll」というエラーメッセージですが、
C:\Temp\testDll.dll を物理的に削除してしまうとエラーメッセージは「実行時エラー53 ファイルが見つかりませんC:\Temp\testDll.dll」に変わります。つまり、testDll.dllの存在有無は分かっているが、「見つからない」と言っているようです。先の質問に頂いたアクセス権の問題のようです。

 Windows7+Excel2003でtestDll.dllを見つけられないと言っている環境でIntelのfortranコンパイラテスト版をインストールしてみました。すると、エラーなく正常に動くのです。
 つまり、フォルダとか、ファイルのアクセス権とは関係ないところで、コンパイラをインストールするだけで実行時エラー48は解消しました。

ここからが今回の質問
 コンパイラをインストールするだけで変わる様なものは何でしょうか?
 コンパイラを入れなくてもエラー48を出さない様にする為に調べるべき項目は何でしょうか?

投稿日時 - 2011-01-16 13:38:58

QNo.6451693

暇なときに回答ください

質問者が選んだベストアンサー

○コンパイラをインストールするだけで変わる様なものは何でしょうか?
 ⇒ testDll.dll 内部で別の dll 等をさらに参照している場合、その dll がコンパイラのインストールで環境に導入されて、それで動くようになることが考えられます。

○コンパイラを入れなくてもエラー48を出さない様にする為に調べるべき項目は何でしょうか?
 ⇒ testDll.dll 内部で参照されている dll を別途インストールすれば良いでしょう。通常、このようなモノは『ランタイム』として提供されているものです。コンパイラの提供元に確認して、ランタイムがないか確認してください。

投稿日時 - 2011-01-16 13:57:06

お礼

 ラインタイムライブラリーをdllに埋め込む方法が提供元に確認して分かりました。
 提供元になんと言って質問すれば解決しそうなのかも分からない五里夢中の状態から、皆様の適切な助言で質問して解決する所までたどり着きました。
 本当にありがとうございました。

 ちなみに色々とテストして分かった事はデフォルトのオプションでDLLを作成するとランタイムライブラリ全く埋め込まないものが作成され、オプションを変更すれば、適切なライブラリを埋め込んだものが作成されると言うことでした。
 ライブラリが埋め込まれていないものはWindowsバージョンによらず駄目でした。

投稿日時 - 2011-01-17 16:12:50

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

「Dependency Walker」というDLLの参照関係を調べてくれるツールがあります。
これを使って必要としているDLLを調べられてはいかがでしょうか。

投稿日時 - 2011-01-16 17:21:40

お礼

 ありがとうございます。
 調べてみましたが良く分からない結果になりました。でも今後このツールを良く使いこなしたいと思います。
 情報ありがとうございます。

投稿日時 - 2011-01-17 16:06:22

あなたにオススメの質問