2

非アクティブ X DLL (非登録) を使用する VB6 アプリがあります。

古典的なPublic Declare Function "Function Name" Lib "Library.DLL"構文で宣言されます。

私の開発マシン (XP) では正常に動作しますが、Vista または Win7 にデプロイすると、実行時エラー 48 - 問題の DLL のファイルが見つかりませんというメッセージが常に表示されます。

テスト マシン上のすべての環境パスとアプリ パスも含めて、考えられるすべてのディレクトリにその DLL をコピーしようとしました。

これらはすべて 32 ビットのテスト環境であるため、SysWow64 の問題ではありません。

問題のアプリケーションが Outlook COM アドインであるという事実は、混乱を招く可能性があります。

Win7 に VB6 をインストールすることができ、この DLL (Outlook プロセスの外部) を利用する小さなサンプル アプリを実行できたので、DLL がアプリ パスにある場合に動作することがわかりました。App.Pathテスト環境で実行するときに DLL から呼び出すと、驚くことではありませんが、インストール ディレクトリが表示されますが、DLL はそこにあります。

UACをオフにしてみました。ディレクトリのアクセス許可をすべての人に公開しようとしましたApp.Pathが、まだサイコロはありません。

4

3 に答える 3

1

DLL 検索で最初に検索される場所は、EXE がロードされたディレクトリであるため、DLL の App.Path は使用されません。

この DLL を System32 にインストールしようとしたことは確かですか? Windowsに?

それとは別に、DLL リダイレクトを相対パス (つまり、VB6 コードを含むフォルダーの下のサブフォルダー) に指定する、呼び出しコード (私がフォローしている場合は VB6) の PATH (乱雑) または分離マニフェストを作成する必要があります。初期化)。

ダイナミック リンク ライブラリの検索順序を参照してください。

于 2012-07-03T14:15:06.140 に答える
1

あなたが提供した詳細によると、DLLを標準のアドインの場所のパスに配置すると役立つようです。

于 2012-07-03T07:20:41.783 に答える
0

DLL 自体の依存関係を確認することをお勧めします。問題の DLL を読み込めなかった場合、または依存チェーンの 20 レベルの深さの DLL を読み込めなかった場合、同じエラーが発生します。

于 2012-07-03T09:16:27.497 に答える