2011-02-03 21 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オブジェクトはすべてがbool

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

success = dSystem.setProperties(objDictionary) 
から voidからの戻り値の型の変更を正常に動作します...しかし、 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) 

から呼び出されます

はエラーになり

MicrosoftのVBScriptランタイムエラー '800a0005'
無効なプロシージャ呼び出しまたは引数が


.tlbファイルはOKのようです

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


何が間違っているのですか?
誰でも私にヒントを与えることができますか?

+1

この初心者の質問はよく聞かれます。 – sharptooth

答えて

4

これについてはわかりませんが、VBScriptはVariantsのみを使用するため、メソッドパラメータをオブジェクトとして宣言する必要があることをぼんやりと覚えているようです。

は、メソッド本体内部のIDictionaryに

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

とキャストを試してみてください。

+0

うん!完璧に動作します!ありがとう、ジョー! – ak75

関連する問題