我正在编写一个与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的大小。