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 のサイズによるものだと思います。