2017-10-25 1 views
-1

ハードウェアを用意していますが、メーカーはDLLとVisual Studioプロジェクトの例を提供しています。Windows/CでDLLをアンロードする#

私はこのプロジェクトに基づいて、DLLの最新バージョンを使用してツールを作成しましたが、正常に動作します。

現在、他の(古い)ツールもあり、他のバージョンのDLLを使用しています。これらのツールは単独でもうまく動作します。

Windowsを再起動せずに両方のツールを実行したときに問題が発生します。

次に、「バージョンが一致しません」というエラーが表示されます。私は、最初に実行されたプログラムが正常に終了したにもかかわらず、WindowsがDLLをロードしたままにしていると思う。

私は「その他のツール」のソースコードへのアクセスを持っていないので、

  1. にどのような方法は、私のプログラムは を開始したときに正しいバージョンのDLLのリロードを強制しています。
  2. フォースWindowsの私のプログラムは

を終了するときにも問題がないだろうDLLをアンロードするには?

+1

がそれですあなたは、アプリケーションの詳細はこちらマニフェスト見つけることができますプロジェクトの参照?そうであれば、そのプロパティを見てください。各プロジェクトは、別のdllを正しく参照していますか?そうであれば、 "Specific Version"は "true"に設定されていますか?それがここに必要なすべてかもしれません。 – DonBoitnott

答えて

0

これらのツールのソースコードがないので、このdllのバージョンを使用している使用するアプリケーションごとにマニフェストファイルを作成する必要があります。これは、実行可能ファイルと同じ名前のファイルで、拡張子が ".manifest"になります。

https://msdn.microsoft.com/en-us/library/windows/desktop/aa374191%28v=vs.85%29.aspx

あなたが代わりにマニフェストファイルを持っていたら、あなたは正確なDLLを指定することになり、それはのようなものをロードする必要がある:

<dependency> 
    <dependentAssembly> 
     <assemblyIdentity type="win32" 
         name="Proseware.Research.SampleAssembly" 
         version="6.0.0.0" 
         processorArchitecture="X86" 
         publicKeyToken="0000000000000000" 
         language="*" 
     /> 
    </dependentAssembly> 
    </dependency> 
関連する問題