Я пытаюсь выяснить, почему происходит эта ошибка, и определить, можно ли ее предотвратить.
Итак, все это в VS2008, работающем под управлением Windows XP Pro SP3. Я пишу библиотеки плагинов панели инструментов для картографического приложения под названием FalconView 4.1.1.6. FalconView (fvw.exe) является приложением activex. Панели инструментов в целом работают нормально, за исключением случайной боли в шее (полученное сообщение об ошибке находится в конце этого вопроса, поскольку оно довольно длинное).
Иногда я могу вызвать это сообщение об ошибке, установив на тестовый ноутбук выпускную версию нашего программного обеспечения, заменив DLL выпуска на DLL отладки (для тестирования), удалив панель инструментов, а затем установив следующую версию панели инструментов , Бум, есть ошибка. Ошибка также возникает при записи и отладке, но менее предсказуемо. Я могу исправить это на моем компьютере разработчика, удалив ссылки на fvw из проекта, выйдя из vs2008, отменив регистрацию всех копий Interop.fvw.dll (созданного из tlb-файла, предоставленного FalconView), запустив «fvw / regserver», перезагрузив проект и добавление Interop.fvw.dll обратно в проект. Какая боль! Что здесь происходит? Есть ли способ предотвратить это?
Спасибо!
Ошибка в вопросе:
System.InvalidCastException: невозможно преобразовать COM-объект типа 'fvw.MapClass' в интерфейс типа 'fvw.IMap'. Эта операция завершилась неудачно, поскольку вызов QueryInterface для компонента COM для интерфейса с IID '{E353BC6C-E8AB-11D3-80B9-00C04F60B086}' завершился ошибкой из-за следующей ошибки: такой интерфейс не поддерживается (Исключение из HRESULT: 0x80004002 (E_NOINTERFACE)) ,
at System.RuntimeType.InvokeDispMethod (имя строки, BindingFlags invokeAttr, цель объекта, аргументы объекта [], логическое значение [] byrefModifiers, культура Int32, строка [] namedParameters)
в System.RuntimeType.InvokeMember (имя строки, BindingFlags bindingFlags, связыватель связывания, объектная цель, Object [] provideArgs, модификаторы ParameterModifier [], CultureInfo culture, String [] namedParams)
в System.RuntimeType.ForwardCallToInvokeMember (String memberName, флаги BindingFlags, объектная цель, Int32 [] aWrapperTypes, MessageData & msgData)
на fvw.MapClass.GetElevation (двойной лат, двойной лон, Int32 и высота)
at Toolbar.rpuav_com.SendElevationData (станция-концентратор)
Обратите внимание, что {E353BC6C-E8AB-11D3-80B9-00C04F60B086} находится в реестре, когда я его ищу.