2011-02-03 29 views
7

VS 2008 ve Windows 7 kullanıyorum.
COM nesnesi olarak görünen bir .NET C# sınıfına sahip oldum.VBScript'ten .NET COM nesnesi çağrılıyor

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

public interface DSystem 
{ 

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

} 

COM nesnesi bir 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) 

Herşey çağrılır bool

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

ve

success = dSystem.setProperties(objDictionary) 
için void den bir dönüş türü değişikliği, gayet iyi çalışıyor ... ama

bir hatayı neden

Microsoft VBScript çalışma zamanı hatası '800a0005'
Geçersiz yordam çağrısı veya değişken


.tlb dosyası ok gibi görünüyor

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


Neyi yanlış yapıyorum?
Herkes bana bir ipucu verebilir mi?

+1

Bu yeni soru çok sorulur. – sharptooth

cevap

4

Bundan emin değilim, ancak VBScript'in yalnızca Varyantları kullandığı için, yöntem parametrelerinizi nesne olarak bildirmeniz gerektiğini hatırlıyorum.

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

deneyin yöntemi vücut içinde başka bir IDictionary döküm.

+0

Evet! Mükemmel çalışıyor! Çok teşekkür ederim Joe! – ak75

İlgili konular