Por que o indexador no meu componente .NET nem sempre é acessível no VBScript?

Eu tenho um assembly .NET que estou acessando do VBScript (ASP clássico) via interoperabilidade COM. Uma classe possui um indexador (também conhecido como propriedade padrão) que eu trabalhei no VBScript adicionando o seguinte atributo ao indexador:[DispId(0)]. Funciona na maioria dos casos, mas não ao acessar a classe como membro de outro objeto.

Como posso fazê-lo funcionar com a seguinte sintaxe:Parent.Member("key") onde Member possui o indexador (semelhante ao acesso à propriedade padrão do built-inRequest.QueryString: Request.QueryString("key"))?

No meu caso, há uma classe paiTestRequest com umQueryString propriedade que retorna umIRequestDictionary, que possui o indexador padrão.

Exemplo de VBScript:

Dim testRequest, testQueryString
Set testRequest = Server.CreateObject("AspObjects.TestRequest")
Set testQueryString = testRequest.QueryString
testQueryString("key") = "value"

A linha a seguir causa um erro em vez de imprimir "valor". Esta é a sintaxe que eu gostaria de trabalhar:

Response.Write(testRequest.QueryString("key"))

Tempo de execução Microsoft VBScript (0x800A01C2)
Número incorreto de argumentos ou atribuição de propriedade inválida: 'QueryString'

No entanto, as seguintes linhasFaz trabalhe sem erros e produza o "valor" esperado (observe que a primeira linha acessa o indexador padrão em uma variável temporária):

Response.Write(testQueryString("key"))
Response.Write(testRequest.QueryString.Item("key"))

Abaixo estão as interfaces e classes simplificadas no C # 2.0. Eles foram registrados viaRegAsm.exe /path/to/AspObjects.dll /codebase /tlb:

[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IRequest {
    IRequestDictionary QueryString { get; }
}

[ClassInterface(ClassInterfaceType.None)]
public class TestRequest : IRequest {
    private IRequestDictionary _queryString = new RequestDictionary();

    public IRequestDictionary QueryString {
        get { return _queryString; }
    }
}

[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IRequestDictionary : IEnumerable {
    [DispId(0)]
    object this[object key] {
        [DispId(0)] get;
        [DispId(0)] set;
    }
}

[ClassInterface(ClassInterfaceType.None)]
public class RequestDictionary : IRequestDictionary {
    private Hashtable _dictionary = new Hashtable();

    public object this[object key] {
        get { return _dictionary[key]; }
        set { _dictionary[key] = value; }
    }
}

Eu tentei pesquisar e experimentar várias opções, mas ainda não encontrei uma solução. Qualquer ajuda seria apreciada para descobrir por que otestRequest.QueryString("key") sintaxe não está funcionando e como fazê-lo funcionar.

Nota: Este é um acompanhamento paraExpondo a propriedade indexador / padrão via interoperabilidade COM.

Atualização: Aqui estão alguns dos IDLs gerados na biblioteca de tipos (usandooleview):

[
  uuid(C6EDF8BC-6C8B-3AB2-92AA-BBF4D29C376E),
  version(1.0),
  custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, AspObjects.IRequest)

]
dispinterface IRequest {
    properties:
    methods:
        [id(0x60020000), propget]
        IRequestDictionary* QueryString();
};

[
  uuid(8A494CF3-1D9E-35AE-AFA7-E7B200465426),
  version(1.0),
  custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, AspObjects.IRequestDictionary)

]
dispinterface IRequestDictionary {
    properties:
    methods:
        [id(00000000), propget]
        VARIANT Item([in] VARIANT key);
        [id(00000000), propputref]
        void Item(
                        [in] VARIANT key, 
                        [in] VARIANT rhs);
};

questionAnswers(6)

yourAnswerToTheQuestion