Почему объект dynamic
не может вызвать эти методы в объекте COM-объекта NameTranslate при отражении?
Ошибка при использовании динамического:
Type ntt = Type.GetTypeFromProgID("NameTranslate");
dynamic nto = Activator.CreateInstance(ntt);
nto.Init(3,null)
Третья строка выходит из строя с NotImplementedException и сообщением. Метод или операция не реализованы.
Аналогичная попытка, которая работает с использованием другого COM-объекта (WScript.Shell и SendKeys):
Type shellType = Type.GetTypeFromProgID("WScript.Shell");
dynamic shell = Activator.CreateInstance(shellType);
shell.SendKeys("abc");
Возвращение к первому образцу. Если я использую отражение и вызывать методы, используя метод InvokeMethod, все работает нормально.
Рабочий пример с использованием отражения:
Type ntt = Type.GetTypeFromProgID("NameTranslate");
object nto = Activator.CreateInstance(ntt);
object[] initParams = new object[]{3,null};
ntt.InvokeMember("Init", BindingFlags.InvokeMethod, null, nto, initParams);
Я считаю, что это должно иметь какое-то отношение к тому, как создается или помечен COM-объект, но для жизни я ничего не вижу в документах, браузерах объектов или реестре, которые указывают эти COM-объекты и их подсистемы/функции отмечены как частные, так и другие, которые обычно отбрасывают ключевое слово dynamic
.
Документация NameTranslate на MSDN: http://msdn.microsoft.com/en-us/library/windows/desktop/aa706046.aspx