4

私は現在、登録不要の COM を採用したネイティブ/マネージド アプリケーション チェーンの開発に取り組んでいます。次の図はこれを示しています。

コム

C# ラッパー DLL は、tlbimp.exe ユーティリティを使用して作成されています。これにより、各 C# 実行可能ファイルが COM DLL のネイティブの型とメソッドにアクセスできるようになります。COM DLL 自体は、サーバー ベースの RegFree COM マニフェストを採用しています。

クライアント ベースの RegFree COM マニフェストが C# 実行可能ファイルに埋め込まれている場合、すべてが正常に機能します。ただし、これらのマニフェスト ファイルを C# DLL に移動して統合したいと考えています。これにより、バージョン情報の保守と同期が大幅に容易になります。

Visual Studio にはマニフェスト ファイルを C# クラス ライブラリに埋め込むオプションが用意されていないため、マニフェスト ツール (mt.exe) を使用して、DLL の既定のマニフェストを抽出、変更、および再埋め込みしようとしました。mt でクエリを実行すると、C# DLL が次のマニフェストを公開するようになったため、これはうまくいったようです。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"><assemblyIdentity name="FirstClient" version="1.0.0.0" processorArchitecture="msil"></assemblyIdentity><file name="FirstClient.dll" hashalg="SHA1"></file>
<dependency>
            <dependentAssembly>
                        <assemblyIdentity type="win32" name="atl" version="1.0.0.0"></assemblyIdentity>
            </dependentAssembly>
</dependency>
</assembly> 

ただし、実行可能ファイルは動作を拒否し、COM クラス ファクトリが欠落している COM モジュールを見つけることができないと不平を言っています。

ここで見落としているものはありますか?ありがとう。

4

1 に答える 1

1

適切なアクティベーションコンテキスト関数をピンボークすることで機能しました。ヒントをくれたHans Passantに感謝します。

于 2014-09-26T18:26:32.690 に答える