2011-02-03 26 views
7

Uso VS 2008 y Windows 7.
Obtuve una clase .NET C# que se expone como objeto COM.llamando al objeto .NET COM de VBScript

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

public interface DSystem 
{ 

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

} 

objeto COM se llama desde un 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) 

Todo funciona bien ... pero, un cambio de tipo de retorno de void a bool

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

y

success = dSystem.setProperties(objDictionary) 

provoca un error

error de ejecución de Microsoft VBScript '800a0005'
no válida llamada a procedimiento o argumento


El archivo .tlb parece estar bien

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


¿Qué estoy haciendo mal?
¿Alguien puede darme una pista?

+1

Esta pregunta de novato está bien hecha. – sharptooth

Respuesta

4

No estoy seguro de esto, pero me parece recordar vagamente que, dado que VBScript solo utiliza variantes, debe declarar los parámetros del método como objeto.

Trate

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

y echados a un IDictionary en el interior del cuerpo del método.

+0

¡Sí! Funciona perfecto! Muchas gracias, Joe! – ak75

Cuestiones relacionadas