我有我想要使用的SAP RPC OCX控件。 在C#4下面的代碼工作正常:Dynamic vs Typed會產生奇怪的結果
System.Type t = System.Type.GetTypeFromProgID("SAP.Functions", true);
dynamic fc = System.Activator.CreateInstance(t, false);
dynamic connection = fc.Connection;
connection.System = "";
下面的代碼無法正常工作(即使連接是NOT NULL)
System.Type t = System.Type.GetTypeFromProgID("SAP.Functions", true);
dynamic fc = System.Activator.CreateInstance(t, false);
var connection = fc.Connection as SAPLogonCtrl.Connection
connection.System = "";
以下錯誤拋出: 「嘗試讀取或寫入保護內存這通常表明其他內存已經損壞。「
最離奇的事實是,這雖然:執行
System.Type t = System.Type.GetTypeFromProgID("SAP.Functions", true);
dynamic fc = System.Activator.CreateInstance(t, false);
dynamic c1 = fc.Connection;
var c2 = fc.Connection as SAPLogonCtrl.Connection;
if (c1 == c2)
c2.System = "";
最後一行,並拋出了同樣的異常! 用c1替換c2按預期工作...
我覺得我錯過了一些微不足道的東西,但我完全失去了...... 請幫忙嗎?
附加信息: 從更改:
dynamic fc = System.Activator.CreateInstance(t, false);
到:
var fc = System.Activator.CreateInstance(t, false) as SAPFunctionsOCX.SAPFunctions;
沒什麼區別。 C1仍然有效,C2仍然沒有。
附加信息#2: 更改FC本身的屬性也適用於這兩種情況。
請告訴我們什麼回報如下:'c1.GetType()的ToString()'和'c2.GetType(。 )的ToString()'。 – 2011-05-26 14:37:01
兩者都返回System .__ ComObject – 2011-05-26 14:44:55
我在黑暗中拍攝了一個鏡頭,但是'fc.Connection'實際上是一個從'SAPLogonCtrl.Connection'繼承的類的實例。這就是爲什麼你的'as'沒有返回null,爲什麼你看到不同的行爲。這可能是丹尼爾試圖通過問你的類型而得到的。 – Greg 2011-06-02 19:02:53