1

私はクラス ライブラリの操作にかなり慣れていないので、誰かが何か不足しているかどうか、または私がやろうとしていることはそれだけの価値があるかどうかを教えてくれることを望んでいました:

VB6 アプリケーションから実行されている dll があります。これを test.dll と呼びます。Test.dll は、Dep.dll と呼ぶ別の .dll を使用します。

最初に、Test.dll に Dep.dll への参照を追加し、Copy Local = 'False' に設定しました。次に、VB6 アプリケーション構成ファイルでアセンブリ バインディングを設定します。

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
     <dependentAssembly>
        <assemblyIdentity name="Dep Name"
                          publicKeyToken="xxxxxxxxxxx"
                          culture="neutral" />
        <codeBase version="1.0.0.2"
                  href="file:\\dir_name\dep.dll"/>
    <bindingRedirect oldVersion="1.0.0.0" newVersion="1.0.0.2"/>
      </dependentAssembly>
    </assemblyBinding>
</runtime>

しかし、Test.dll 用の app.config ファイルを作成し、VB6.exe 用のアプリ構成ファイルの代わりに前述のエントリをそこに入れることができたと聞いています。

何らかの理由で、参照をこのように機能させることができませんでした。エラーメッセージは次のとおりです。

ファイルまたはアセンブリ 'Dep.dll, Version=1.0.0.2,Culture=neutral,PublicKeyToken=xxxxxxxxxxx' またはその依存関係の 1 つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。

app.config ファイルの Build Action プロパティを「Content」に変更し、Copy Output プロパティを「Copy Always」に変更しました。また、Test.dll のプロジェクト ファイル内にある Dep.dll への元の参照に対しても何もしませんでした。VB6.exe の app.config ファイルから Dep.dll のアセンブリ バインド エントリを削除しました。

app.config ファイルを使用した dll の動作例を 1 つここに示しますが、アセンブリをバインドせず、多数のアプリ設定を持っているだけです。

私が行っている研究は、おそらく私がやっていることは不可能であるか、ベストプラクティスでさえないことを示唆していますが、今私がしようとしていることが可能かどうかを知りたいだけです. もしそうなら、私は何が欠けていますか?

4

1 に答える 1

0

アセンブリの概念は VB6 とは無関係であり、VB6 DLL は .Net DLL とはまったく別物です (VB6 はネイティブ コードにコンパイルされ、.Net は IDL にコンパイルされます)。また、VB6 EXE は構成情報を読み取るために app.config を使用しません (独自の xml リーダーを作成しない限り)。.ini ファイルまたはレジストリを使用します。

ここで、Test.Dll と Dep.Dll がどの種類の DLL であるかを指定していません。この情報がなければ、答えは当て推量になります。ただし、VB6 を使用して app.config ファイル内の DLL に関するアセンブリ情報を検索しようとすると、うまくいきません。VB6 DLL は、アセンブリ バインディングとは何かを認識していません。

VB6 EXE は、COM アーキテクチャを使用して DLL 機能にアクセスします。.Net アーキテクチャを VB6 に公開する場合は、.Net Interop サービスを使用します。[この記事]) http://support.microsoft.com/kb/817248 ) では、VB6 から .Net アセンブリを呼び出す方法について説明しています。app.config を利用したい場合は、Interop 経由でインターフェイスを公開し、app.config から構成情報を取得するメソッドを持つ .Net クラスを作成します。その後、VB6 exe はこれらのメソッドを呼び出すことができます。 この記事は、これを行う方法のかなり良い要約のように見えます。

于 2014-07-13T05:27:17.997 に答える