Динамический или типизированный дает странные результаты

У меня есть элемент управления SAP RPC OCX, который я хотел бы использовать. В C # 4 следующий код работает нормально:

System.Type t = System.Type.GetTypeFromProgID("SAP.Functions", true);            
dynamic fc = System.Activator.CreateInstance(t, false);
dynamic connection = fc.Connection;
connection.System = "";

Следующий код НЕ работает (даже если соединение НЕ является нулевым)

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 = "";

Последняя строка выполняется и выдает то же исключение !!! Замена c2 на c1 работает, как ожидалось ...

Я чувствую, что упускаю что-то тривиальное, и все же я в полной растерянности ... Пожалуйста, помогите?

Дополнительная информация: Изменение с:

dynamic fc = System.Activator.CreateInstance(t, false);

на:

var fc = System.Activator.CreateInstance(t, false) as SAPFunctionsOCX.SAPFunctions;

не имеет значения. c1 по-прежнему работает, а c2 - нет.

Дополнительная информация # 2: Изменение свойств самого FC также работает в обоих случаях.

7
задан Matthew Murdoch 31 May 2011 в 21:36
поделиться