Здравствуйте, ie, Вы писали:
ie>Здравствуйте, AkaSaint, Вы писали:
AS>>Вопрос: почему, казалось бы, очевидно-идентичные типы данных делегатов не преобразуются друг в друга?
ie>Давайте разберемся сначала вот с таким кодом, казалось бы, никак не связанным с вашими делегатами:
ie>ie>class A
ie>{
ie> int i;
ie>}
ie>class B
ie>{
ie> int i;
ie>}
ie>[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlAppDomain)]
ie>static void Main(string[] args)
ie>{
ie> A a;
ie> a = new A(); //OK
ie> a = (A)new B(); //Compile-time error:Cannot convert type 'B' to 'A'
ie> a = (A)(object)new B(); //Run-time error: InvalidCastException: Unable to cast object of type 'B' to type 'A'
ie>}
ie>
ie>Где проблема в этом коде вы понимаете?
я не понимаю. У меня скорее всего проблема похожего сорта. Получаю исключение InvalidCastException Unable to cast 'Type1' to 'Type1'. Type1 (условно) это делегат полученный вызовом Marshal.GetDelegateForFunctionPointer, при этом исходный указатель берется через WinApi. А потом при попытке Type1 type1 = (Type1) Marshal.GetDelegateForFunctionPointer(intPtr, typeof(Type1)) исключение. Если не кастировать, то исключений нет.