2016-09-21 301 views
3

私はC++で書いたテストDLLを呼び出すExcelワークブックを持っています。 DLLへのパスはVBAでハードコードされています。 DLLが使用する唯一のファイルはstdlibとiostreamです。VBA呼び出しC++ DLL - エラー48(ファイルが見つかりません)

私のマシンでは動作します。他のいくつかのオフィスマシンでは、それは動作します。しかし、残りの部分でExcelからDLLを呼び出そうとすると、エラー48 - ファイルが見つかりません。

私の理解はエラーです53ファイルがありません。エラー48には欠落している依存関係があります。私は依存性ウォーカーを使用しており、何の問題も見つけていません。

私が発見したのは、マシンにVisual Studioをインストールすると、インストール後にExcelファイル/ DLLが完全に機能する確率が90%になるということです。 10%で動作しないので、Visual Studioのインストールを再起動して再起動し、「修復」を選択して、インストールが完了した後、Excel/DLLコンボが再び機能します。基本的にVisual Studioをインストールすると、DLLをExcelで読み込むことができます。 Visual Studioをアンインストールすると、DLLは正常に動作します。

明らかに、これはマシン上に何かがないことを意味しますが、私は分かりません。最新の.netフレームワーク、Visual C++、配布可能なものなど...それは動作しません。動作する唯一のものは、Visual Studio自体をインストールすることです。 私は5gigのISOを搭載して開発者環境をインストールするようユーザーに依頼してから実際に理想的ではないので、どのように進めるべきかはわかりません。


Ah-ha、問題が見つかりました。 msvcr120.dllとmsvc120.dllという2つのDLLファイルが必要です。私はSystem32フォルダにこれらの2つのファイルを持っていましたが、私のSysWOW64フォルダにはありませんでした。そのフォルダにデータが移入されるとすぐに、DLLが動作するようになりました。

私は同じ問題を抱えていますが、答えはないので、同じ問題が発生した場合は、依存関係ウォーカーを使用し、DLLが両方のシステムフォルダに安全であることを確認することをお勧めします私はSystem32が64bit DLLにのみ必要であり、SysWOW64は32bit DLLに必要と思われる)。

答えて

1

ほとんどの場合、DLLはC++の再配布可能ファイルによって異なります。 DLLの開発に使用したVC++のバージョンに応じて、関連するバージョンのVC++再配布可能ファイルをターゲットマシンにインストールする必要があります。

あなたがここにVC++再頒布可能を見つけることができますVS 2015の場合: https://www.microsoft.com/en-us/download/details.aspx?id=48145

0

をDLLへのアクセスを監視し、エラーを探すためのSysinternalsプロセスモニターユーティリティを使用します。この例の例はother answerです。 ExcelプロセスとCreateFile操作を監視します。

0

Ah-ha、問題が見つかりました。 msvcr120.dllとmsvc120.dllという2つのDLLファイルが必要です。私はSystem32フォルダにこれらの2つのファイルを持っていましたが、私のSysWOW64フォルダにはありませんでした。そのフォルダにデータが移入されるとすぐに、DLLが動作するようになりました。

私は同じ問題を抱えていますが、答えはないので、同じ問題が発生した場合は、依存関係ウォーカーを使用し、DLLが両方のシステムフォルダに安全であることを確認することをお勧めします私はSystem32が64bit DLLにのみ必要であり、SysWOW64は32bit DLLに必要と思われる)。

0

エラー48は、dllが呼び出し元プログラムのビット数に対応していない場合にも返されます。たとえば、ExcelのVBAをExcel 64ビットで実行している場合、DLLが64ビットバイナリとしてコンパイルされていることを確認する必要があります。

これは実際にDLLがどのパスにもないことを意味するエラー53とは異なります。

関連する問題