2011-02-03 4 views
7

VS 2008 및 Windows 7을 사용합니다.
COM 개체로 제공되는 .NET C# 클래스가 있습니다.VBScript에서 .NET COM 개체 호출

[Guid("E5014B85-FCB2-4F0D-95EC-F741395A7923")] 
[InterfaceType(ComInterfaceType.InterfaceIsDual)] 

public interface DSystem 
{ 

    [DispId(1610809354)] 
    void setProperties(IDictionary propertymap); 

} 

COM 객체가 VBScript를

dim dSystem 
set dSystem = CreateObject("MYCOMOBJECT") 

Dim objDictionary 
Set objDictionary = CreateObject("System.Collections.Hashtable") 
objDictionary.Add "PROP1", "abc" 
objDictionary.Add "PROP2", "zyx" 

dSystem.setProperties(objDictionary) 

모두에서 호출하는 것은 bool

[DispId(1610809354)] 
    bool setProperties(IDictionary propertymap); 

success = dSystem.setProperties(objDictionary) 
- void에서 반환 유형 변화, 잘 작동 ...하지만 ,451,515,

오류를 발생

Microsoft VBScript 런타임 오류 '800a0005'
잘못된 프로 시저 호출 또는 인수가


.TLB 파일이 확인 될 것으로 보인다

[id(0x6003000a)] 
HRESULT setProperties(
[in] IDictionary* propertymap, 
[out, retval] VARIANT_BOOL* pRetVal); 


내가 도대체 ​​뭘 잘못하고있는 겁니까?
아무도 내게 힌트를 줄 수 있습니까?

+1

이 새내기 질문은 질문이 높습니다. – sharptooth

답변

4

잘 모르겠지만 VBScript에서 Variants 만 사용하기 때문에 메서드 매개 변수를 개체로 선언해야한다는 사실을 막연하게 기억하는 것 같습니다.

[DispId(1610809354)]  
bool setProperties(object propertymap); 

을 시도하고 방법 본체 내부에 IDictionary에 캐스팅.

+0

예! 완벽하게 작동합니다! 고마워, 조! – ak75