2

レガシーコードにアクセスするには、いくつかのOCXライブラリをロードする必要があります。Activator.CreateInstanceを使用してインスタンスを作成しています。

var type = Type.GetTypeFromProgID(ProgId);
var comObject = Activator.CreateInstance(type);

残念ながら、Activator.CreateInstanceはProgIdごとに1つのインスタンスしか作成しないようですが、異なる構成の複数のインスタンスが必要です。

例:値を設定できるOCXを使用していると仮定します。

var instance1 = Create(progId);
Set(instance1, "key", "1");
var value1 = Get(instance1, "key"); // returns 1

var instance2 = Create(progId);
Set(instance2, "key", "2"); 
var value2 = Get(instance2, "key"); // returns 2

var value3 = Get(instance1, "key"); // returns 2

1つのインスタンスへの参照を渡さずに、1つのOCX(同じProgId)コントロールを複数回インスタンス化する方法が必要です。

4

1 に答える 1

0

この問題は、OCX がグローバル変数を使用しないように変更することで解決されました。ありがとうハンス・パッサン。

于 2011-03-18T09:08:21.487 に答える