0

OCX コンポーネントを使用する C# アプリケーションを作成しています。ある種のプリンターのメーカーからこのコンポーネントを入手しました。それらのファイルのインストール中に、foo.ocx が私の C:\Windows\System32 に追加されました。

私がしなければならなかった唯一のことは、ソリューション エクスプローラーで参照を追加し、そのライブラリを COM タブでポイントすることでした。次に、インターフェースを取りました:

[Guid("XXX")]
 [CoClass(typeof(FooClass))]
 public interface Foo : IFoo { }

COMインターフェイスのインスタンスを作成しました:

 class Program
 {
  static void Main(string[] args)
  {
   var foo = new Foo();
  }
 }

すべてが正常に動作します。私はこれを正しく行っていますか?

2 番目に重要なことは、これを展開する方法がわからないということです。ソリューション エクスプローラーで参照されるファイルには、次のプロパティがあります: 埋め込み相互運用タイプ: True、分離: False。これにより、ビルド ディレクトリに 1 つの exe ファイルのみが作成されます。自分のアプリケーションを他のマシンで使用したいので、何かをしなければなりませんが、どうすればよいかわかりません。コピー ローカルを含め、その参照のプロパティを変更しようとしましたが、この ocx ファイルを他のマシンにインストールする必要があると思われます。regsvr32 または regasm を使用する必要がありますか? この ocx ファイルを登録する必要がありますか?

4

2 に答える 2

1

[CoClass]属性を使用することは非常に珍しいことです。通常、Tlbimp.exeに依存するか、COM参照を追加して、タイプライブラリを相互運用クラスに自動的に変換します。間違いやバージョン管理の問題を回避します。しかし、それが機能する場合は、ねえ。

はい、そのCOMサーバーをターゲットマシンに展開してインストールする必要があります。これは、.ocxファイルをコピーしてRegsvr32.exeに登録するだけの簡単なものです。しかし、それほど単純なことはめったにありません。.ocxファイルが他のDLLに依存している可能性があり、それらもコピーまたは登録する必要があります。ベンダーのインストーラーを使用するのが最善です。未使用のテストマシンまたはVMで何が必要かを調べます。

于 2010-07-07T13:13:27.847 に答える
0

Hans Passant はすでに私の質問に答えていますがIsolated、参照プロパティを設定するTrueと、exe、exe.manifest、および元の ocx ファイルがリリース フォルダーに配置されますが、マークした場合にのみ機能することがわかりました。属性を持つ私のMainメソッド:[STAThread]

class Program
{
 [STAThread]
 static void Main(string[] args)
 {
  var foo = new Foo();
 }
}

これを実行しないと、exe はInvalidCastException. その後、その ocx を regsvr32 に登録する必要はありません。

于 2010-07-07T13:57:42.940 に答える