COM(TCPソケットまたはWCFを好む)を使ったことはありませんが、私はそれを主張する顧客を持っています。csharp com目に見えるdllの理解
私は、.NETアプリケーションを持っていると私はテスト目的のために、ここでその中の検索から以下のクラスを作成しました:25(
namespace Test112
{
public class Class2
{
public static int number = 70;
}
}
外部アプリケーション値を割り当てる必要があります。
namespace Test112
{
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[Guid("BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB")]
public interface MyCOMInterface
{
int assigntest();
int testreturn();
}
[ProgId("Test112.Class1")]
[ComVisible(true)]
[Guid("AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA")]
[ClassInterface(ClassInterfaceType.None)]
public class Class1 : MyCOMInterface
{
public int assigntest()
{
Class2.number = 25;
return 0;
}
public int testreturn()
{
return Class2.number;
}
}
}
クラス2は、 )、別のクラスはClass2の静的フィールドの値を読み取る必要があります。
私が使用:
Type testlib = Type.GetTypeFromProgID("Test112.Class1");
dynamic comObj = Activator.CreateInstance(testlib);
var k = comObj.assigntest();
私が直接、または使用して別のからそれを読んしようとすると、それを割り当てられますが:
Type testlib = Type.GetTypeFromProgID("Test112.Class1");
dynamic comObj = Activator.CreateInstance(testlib);
var k = comObj.testreturn();
を私は値として70を得続けます。私はここで間違って何をしていますか?
COMの目的は、TCPまたはWCFと大きく異なります。 –
最後の2つのコードスニペットはどうなりますか? 'comObj.assigntest()'の直後に 'comObj.testreturn()'を呼び出すと、おそらく正しい結果が得られます。 1つのプログラムを終了させ、別のプログラムを実行する、何かをAppDomainsなどとするなど、最後の2つのコードスニペットの間にできることはたくさんあります。 GCの問題を減らすため)、結果は何ですか? –