オブジェクトを返すか、オブジェクトが存在しない場合は null を返す COM ラッパーを作成しています。VBScript から呼び出す場合、null を返すと、「必要なオブジェクト: 'ComObj.Prop2'」というエラーがスローされます。コード 800A01A8...
C#
public class testCOM
{
public object Func(int i)
{
if (i == 1) return new object();
if (i == 2) return DBNull.Value;
return null;
}
}
VBScript
set ComObj = CreateObject("ClassLibrary1.testCOM")
set TestObj = ComObj.Func(1) 'This Works
set TestObj = ComObj.Func(2) 'Throws "Object required: 'ComObj.Func(...)'" Code 800A01A8
set TestObj = ComObj.Func(3) 'Throws "Object required: 'ComObj.Func(...)'" Code 800A01A8
set TestObj = Nothing 'This is what I want to occur with Func(2) and Func(3)
VT_NULL としてマーシャリングするはずの DBNull.Value を返そうとしましたが、うまくいきませんでした...
.HasValue と .Value を使用して Nullabe<> に似たラッパー オブジェクトを作成したくありません。別の方法としては、Nothing オブジェクト (名前空間なし) を作成することもできません。
If TestObj Is Nothing And TestObj = "Nothing" Then
'TestObj was nothing or "Nothing"
End If
Nothing オブジェクトを使用すると、COM オブジェクトは、期待される型付きオブジェクトではなく型 Object を返さなければならないため、機能的には同じですが、コードが少し読みにくくなります。
COM 経由で VBScript に null オブジェクトを返す最良の方法は何ですか?