從來沒有與COM(喜歡TCP套接字或WCF)工作,但我有一個堅持它的客戶。csharp com可見DLL理解
我有一個.NET應用程序,我已經從這裏尋找它的測試目的創建了以下類:
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:
namespace Test112
{
public class Class2
{
public static int number = 70;
}
}
外部應用程序應該分配一個值(25 ),另一個類應讀取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非常不同。 –
最後兩個代碼片段之間會發生什麼?如果你在'comObj.assigntest()'之後立即調用'comObj.testreturn()',你可能會得到正確的結果。在最後兩個代碼片段之間可能會做很多事情 - 終止一個程序並運行另一個程序,與AppDomain等等有關。如果在第一個代碼片段之後立即運行第二個代碼片段(使用不同的變量減少任何GC問題),結果如何? –