0

私は現在、Inventor (3d モデリング ソフトウェア) のアドインに取り組んでいます。APIを使用している場合、2つの異なる種類のドキュメントがあります

  • アセンブリ ドキュメント
  • パーツドキュメント

API は、選択したドキュメントを返すメソッドを提供します。

   PartDocument part = ((PartDocument)application.ActiveDocument);

実行時にこのキャストが機能します。コンパイラは、「PartDocument」が「application.ActiveDocument」が返す型を実装していないため、疑わしいキャストであると通知します。

 [TypeLibType(TypeLibTypeFlags.FDispatchable)]
  [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
  [Guid("xxxxxx")]
  [DefaultMember("Type")]
  [ComImport]
  public interface PartDocument
  {
....
 [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
  [TypeLibType(TypeLibTypeFlags.FDispatchable)]
  [Guid("xxxxx")]
  [DefaultMember("Type")]
  [ComImport]
  public interface Application
  {...

    [DispId(50331905)]
    _Document ActiveDocument { [DispId(50331905), MethodImpl(MethodImplOptions.PreserveSig | MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] [return: MarshalAs(UnmanagedType.Interface)] get; }
[Guid("xxxxxx")]
  [CoClass(typeof (_DocumentClass))]
  [ComImport]
  public interface _Document : Document, _VbaImplementationEvents_Event
  {
  }

では、なぜこれが機能しているのでしょうか。誰かがこれを私に説明できますか?

そして、どうすればこれをテストできますか?

var documentMock =new Mock<PartDocument>();
var applicationMock = new Mock<Application>();
applicationMock.Setup(x => x.ActiveDocument).Returns(documentMock.Object);

コンパイラは、'PartDocument' から '_Document' にキャストできないと言っています --> これは正しいのに、なぜ実行時に機能するのですか?

前もって感謝します

4

1 に答える 1