Сбой среды IDE Visual Studio с использованием IDispatch.GetTypeInfo () для Excel.Application - PullRequest
1 голос
/ 17 мая 2011

Я пишу приложение для взаимодействия с компонентами COM и столкнулся с проблемой при работе с компонентом Excel.Application при запуске приложения в Visual Studio 10 IDE. Я получаю фатальную ошибку Out of Memory. Все работает нормально, если я просто запускаю EXE, но это сильно ограничивает мои возможности отладки. Все остальные компоненты COM, к которым я получил доступ, работают нормально, включая как отечественные, так и коммерчески доступные компоненты.

Вот консольное приложение, которое демонстрирует этот сбой. Ради простоты я удалил всю обработку ошибок. Помещение блока try / catch вокруг нарушающего кода не помогает. Этот проект требует ссылки на CustomMarshalers.dll.

    class Program
    {
        static void Main(string[] args)
        {
            InstantiateCOMComponent("Excel.Application");
        }

        private static void InstantiateCOMComponent(string name)
        {
        Type typeInfo = Type.GetTypeFromProgID(name);
        object instance = Activator.CreateInstance(typeInfo);
        IDispatch dispatch = instance as IDispatch;

        // NOTE: THIS CALL FAILS WITH Excel.Application in the IDE
        // but succeeds at run-time!! (Out of Memory fatal error)
        Type comTypeInfo;
        dispatch.GetTypeInfo(0, 0, out comTypeInfo);
        }
    }

 [ComImport, 
  Guid("00020400-0000-0000-C000-000000000046"),
  InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IDispatch
{
    void Reserved();
    [PreserveSig]
    int GetTypeInfo(uint nInfo, int lcid,
       [MarshalAs(
          UnmanagedType.CustomMarshaler,
          MarshalTypeRef = typeof(TypeToTypeInfoMarshaler))]
       out System.Type typeInfo);
}

Я думаю, что проблема просто из-за размера Excel.

...