私はプロセスに複数のCOMCTL32.DLLをロードすることはできますか?
-
13-09-2019 - |
質問
私はWinFormsのアプリケーションで主に使用されている(これらの日)のActiveXコントロールを開発しています。
ActiveXコントロールは、AxHostクラスのShowPropertyPagesメソッドを使用してプログラムで表示することができます 'プロパティページ]ダイアログを持っています。これは、コントロールのプロパティを編集するには、Visual Studioで育てできるカスタムUIです。
このプロパティページ]ダイアログボックスには、リスト項目の隣にアイコンを表示するイメージリストを使用してListBoxコントロールが含まれています。これらのアイコンは32ビットのアルファブレンドビットマップです。これらを適切に表示するために、バージョンはの]または[COMCTL32.DLLの上記6.0を使用しなければなりません。
私は私のWinFormsのアプリケーションを実行すると、残念ながら、それはロードとCOMCTL32.DLLのバージョンの5.xxxのを使用しています。プロパティページ]ダイアログボックスが表示されたときにアイコンが悪く見える結果として、(半透明の領域が黒一色で描かれている)。
私の質問は:私は関係なく、プロセスが使用しているものの、ActiveXコントロールのプロパティページのUI内からCOMCTL32.DLLのバージョン6.0以上を使用して確認することができます方法はありますか?または私はバージョン6.0を使用するためにホストプロセスを強制することができますか?私は、ActiveXコントロールのコードのいずれかの前に、メモリにすでにロードされている場合がありますCOMCTL32.DLLをホストプロセスを考えていますので、(私は、そうは思いません。
解決
オリジナルのMSDNの記事は、私を混乱させました。実際には、基礎となる技術は、それがより一般的な作品の話をされます。
に 'マニフェスト' xmlファイルにリソースを追加することによりActiveX DLLは、私はDLLがCOMCTL32.DLL 6.xのを使用することを望んサイド・バイ・サイドのシステムに信号を送ることができますこのバージョンは、自動的にロードされます。かなりいいます。
このマニフェストは、リソースのIDと、リソースタイプの RT_MANIFEST をする必要があるの 2 の
ここでの成功の証拠だ(同じプロセスにロードされ、同じDLLの2つのバージョンが!):
(また、アイコンはリストボックスで正しく表示の;)の)
他のヒント
アプリケーションがApplication.EnableVisualStylesを(呼び出す場合)(通常Application.Run()を呼び出す前に、メッセージループを開始します)その後、コモンコントロールライブラリのバージョン6+を使用する必要があります。