1

我正在编写一个与 COM 组件交互的应用程序,在 Visual Studio 10 IDE 中运行我的应用程序时使用 Excel.Application 组件时遇到了问题。我遇到了致命的内存不足错误。如果我只运行 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 的大小。

4

0 回答 0