개체를 반환하는 COM 래퍼를 작성 중이며 개체가없는 경우 null을 작성합니다. VBScript를에서 호출 할 때 null을 반환하면 오류 "개체 필요 : 'ComObj.Prop2'"던져 코드 800A01A8 ...C# COM Interop에서 null 개체가 반환됩니다. 0x800A01A8 개체가 필요합니다.
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)
을 내가 DBNull이 반환했습니다. VT_NULL로 마샬링해야하는 값이지만 행운은 없습니다 ...
나는 정말로 Nullabe <과 비슷한 래퍼 객체를 작성하고 싶지 않습니다 .HasValue 및 .Val UE ... 내가 좋아하지 않는 또 다른 옵션 (네임 스페이스 내부)는 아무것도 개체를 만드는 것입니다 그래서 내가 할 수있는 :
If TestObj Is Nothing And TestObj = "Nothing" Then
'TestObj was nothing or "Nothing"
End If
을 나는 아무것도 개체를 사용하는 경우, 내 COM 객체는 Object 유형을 reutrn한다 예상 된 형식화 된 객체 대신 코드를 내 용도로 기능적으로 동일하게 읽을 수 있도록 약간 더 어렵게 만듭니다.
COM을 통해 VBScript로 null 개체를 반환하는 가장 좋은 방법은 무엇입니까?
감사합니다. 안타깝게도 제안은 반환 된 객체/값을 변수에 할당하지 않습니다. 대신 다른 함수 인 TypeName에 직접 전달합니다. vbscript가 : – FuncL
vbscript가'Set TestObj = myObject.test (2)'를'Echo TypeName (TestObj) '하기 위해 시도한 경우 코드 800A01A8에 오류가 발생합니다. 분명히,'set'은 객체를 설정해야하므로 객체가 아닌 null을 반환 할 수 없습니다. '설정'을 끝내면 작동합니다. 나는 루트 네임 스페이스에 Nothing 클래스를 만들고'If TypeName (TestObj) = "Nothing"Then'을 테스트했습니다. – FuncL
IsNull을 설정하기 전에 IsNull로 테스트 할 수 없었습니까? – basiphobe