ユーザーが特定の専用シミュレーターの COM インターフェイスをより簡単に使用できるようにする C# プログラムとライブラリーを作成しました。
現在、サポートしたいシミュレータのバージョンごとに異なるバージョンの C# ライブラリをビルドして配布する必要があります。シミュレーターを開発する会社は定期的に新しいバージョンをリリースし、新しいバージョンごとに増分されたメジャー バージョン番号を取得します。私が知る限り、バージョン間での COM インターフェイスの変更は (まだ) ないため、呼び出しと動作は私の観点からはすべて同じです。ただし、シミュレーター バージョン 9.0 に対してライブラリとインストーラーをビルドし、ユーザーがバージョン 10.0 をインストールしている場合、私の C# プログラムはシミュレーターの COM インターフェイスを見つけることができません。(シミュレーターのマイナー アップグレードでも、COM インターフェイスのメジャー バージョン バンプが発生します。) そのため、サポートされているすべてのバージョンのシミュレーターに対してライブラリをビルドする必要があります。うざい、
これを行う方法が必要なようです。このページに方法が説明されているのではないかと思いました: How to: Wrap Multiple Versions of Type Libraries。しかし、それは私にはうまくいかなかったようです。
もちろん、私がそれを正しくしなかった可能性があります。指示に従って、COM インターフェイスの 2 つのバージョンの .il ファイルを取得しました。9.0 と 10.0。しかし、私は次のステップについて混乱していて、例を見つけることができませんでした:
テキスト エディターを使用して、Tlbimp.exe によって追加された属性の下に 2 つ目の PrimaryInteropAssemblyAttribute 属性を挿入します。タイプ ライブラリの 2 番目のバージョンを表すメジャー バージョン番号とマイナー バージョン番号を含めます。
アセンブリ ブロックを複製する必要があるのか、それともブロック内の行だけを複製する必要があるのかがわかりませんでした (これにはバージョン情報が表示されません)。そこで、次のようにアセンブリ ブロックを複製しました。
enter code here
.assembly Interop.Happ
{
.custom instance void
[mscorlib]System.Runtime.InteropServices.ImportedFromTypeLibAttribute::.ctor(string) = ( 01 00 04 48 61 70 70 00 00 )
.custom instance void
[mscorlib]System.Runtime.InteropServices.PrimaryInteropAssemblyAttribute::.ctor(int32, int32) = ( 01 00 09 00 00 00 00 00 00 00 00 00 )
////////////// [SNIP] ///////////////
.ver 9:0:0:0
}
.assembly Interop.Happ
{
.custom instance void
[mscorlib]System.Runtime.InteropServices.ImportedFromTypeLibAttribute::.ctor(string) = ( 01 00 04 48 61 70 70 00 00 )
.custom instance void
[mscorlib]System.Runtime.InteropServices.PrimaryInteropAssemblyAttribute::.ctor(int32, int32) = ( 01 00 0A 00 00 00 00 00 00 00 00 00 )
////////////// [SNIP] //////////////
.ver 10:0:0:0
}
.module Interop.Happ.dll
これはうまくいきませんでしたが、他の解釈がどのように可能になるかわかりません。誰かが私が間違っていることを見ることができますか? 私は完全に間違った方向に進んでいますか、それとも .il ファイルの間違った部分を結合しただけですか?