Visual Studio IDE崩溃使用IDispatch.GetTypeInfo()for Excel.Application

时间:2011-05-16 23:19:30

标签: com idispatch createinstance

我正在编写一个与COM组件接口的应用程序,在使用Visual Studio 10 IDE中运行应用程序时使用Excel.Application组件时遇到了问题。我得到致命的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的大小。

0 个答案:

没有答案