私は、プラグインが提供するAPIタイプライブラリを使用して、職場で使用するプログラムのプラグインを作成します。これは、SCAPIという名前のCOMオブジェクトです。COMオブジェクトはVB6用に作成されているため、.NET用に参照を追加すると、その相互運用バージョンが作成されます。
次のコードを使用すると、ドキュメントに従ってSAFEARRAY(Long)が返されるはずですが、SafeArrayTypeMismatchExceptionがあるというエラーが表示されます。
Dim oBag As SCAPI.PropertyBag = tempModel.PropertyBag
Dim x = oBag.Value("Created")
エラーは、私が書いたものではなく、COMオブジェクトの一部であるSCAPI.PropertyBagClass.get_Value(Object Property)関数からスローされています。私が行ったすべての調査の後、これを機能させるために何をする必要があるのか理解できないようです。tlbimp.exeを使用してメソッド情報を取得しましたが、文字列を返す同じ関数oBag.Value( "Name")を使用したにもかかわらず、[out]タグが含まれていないようです。値であり、エラーをスローしません:
.method public hidebysig newslot specialname abstract virtual
instance object
marshal( struct)
get_Value([in] object marshal( struct) Property) runtime managed internalcall
{
.custom instance void [mscorlib]System.Runtime.InteropServices.DispIdAttribute::.ctor(int32) = ( 01 00 01 00 02 60 00 00 ) // .....`..
} // end of method ISCPropertyBag::get_Value