Pregunta

hasta ahora he hecho un componente en C # .NET 4 y System.EnterpriseServices uso para que sea visible COM. Quiero desarrollar métodos comerciales en C #, pero todavía tengo que ellas acceso desde ASP clásico (VBScript).

Hasta aquí todo bien, todo funciona bien (sobrecarga de funciones exepto :)). Ahora he hecho una clase de prueba para obtener más Expirience con código de retorno.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.EnterpriseServices;
using System.Management;

namespace iController
{
  /// <summary>
  /// The tools class provides additional functions for general use in out of context to other classes of the iController.
  /// </summary>
  public class tools :ServicedComponent
  {

    #region publich methods

    public bool TestBoolean()
    {
      return true;
    }

    public string TestString()
    {
      return "this is a string";
    }

    public int TestInteger()
    {
      return 32;
    }

    public double TestDouble()
    {
      return 32.32;
    }

    public float TestFloat()
    {
      float ret = 2 ^ 16;
      return ret;
    }

    public string[] TestArray()
    {
      string[] ret = {"0","1"};
      return ret;
    }

    public int[][] TestJaggedArray()
    {
      int[][] jaggedArray = new int[3][];
      jaggedArray[0] = new int[] { 1, 3, 5, 7, 9 };
      jaggedArray[1] = new int[] { 0, 2, 4, 6 };
      jaggedArray[2] = new int[] { 11, 22 };
      return jaggedArray;
    }

    public Dictionary<string, string> TestDictionary()
    {
      Dictionary<string, string> ret = new Dictionary<string,string>();
      ret.Add("test1","val1");
      ret.Add("test2","val2");
      return ret;
    }

    #endregion

  }
}

A continuación, acabo de hacer un archivo VBScript simple de ejecutar con cscript.exe para probar porpuse.

Dim oTools : Set oTools = CreateObject("iController.tools")

WScript.StdOut.WriteLine TypeName(oTools.TestBoolean()) & " - " & oTools.TestBoolean()
WScript.StdOut.WriteLine TypeName(oTools.TestString()) & " - " & oTools.TestString()
WScript.StdOut.WriteLine TypeName(oTools.TestInteger()) & " - " & oTools.TestInteger()
WScript.StdOut.WriteLine TypeName(oTools.TestDouble()) & " - " & oTools.TestDouble()
WScript.StdOut.WriteLine TypeName(oTools.TestFloat()) & " - " & oTools.TestFloat()

test = oTools.TestArray()
WScript.StdOut.WriteLine TypeName(test)
WScript.StdOut.WriteLine UBound(test)

For i = 0 To UBound(test)
  WScript.StdOut.WriteLine test(i)
Next

For Each item IN test
  WScript.StdOut.WriteLine item
Next

test = oTools.TestJaggedArray()
WScript.StdOut.WriteLine TypeName(test)
For Each item IN test
  WScript.StdOut.WriteLine test & " - " & test.Item(item)
Next

test = oTools.TestDictionary()
WScript.StdOut.WriteLine TypeName(test)
For Each item IN test
  WScript.StdOut.WriteLine test & " - " & test.Item(item)
Next

Lo que funciona bien:

string, int, foat, double

Cuando se trata de la matriz, o jaggedarray diccionarios recibo una coincidencia de tipos. VarType es 13 objeto para el ejemplo diccionario pero esto dict parece ser diferente a la Scripting.Dictionary.

he comprobado codeproject.com y Stackoverflow todo el día y no encontrar ninguna pista, excepto con un poco de hilo en StackOverflow en la que alguien ha mencionado hay una necesidad de creado una interfaz IDispatch.

Así que cualquiera que haya tenido el mismo problema y me puede ayudar o darme algunos consejos que puedo seguir con?

¿Fue útil?

Solución

  1. lección: que .NET manejar sus MarshalAs:)

    public object[] Read()    {      var retVal = new object[] {1,2,3};      return retVal;    }
    

Esta es una matriz de la que puedo acceder desde VBScript. La clave es que tiene que ser objeto [].

Ahora voy a trabajar en una solución para las matrices dentadas y diccionarios ...

Otros consejos

Las matrices Pasando a COM: Todas las arregló tipos de matriz se pueden pasar a no administrado código de código administrado. Dependiendo de el tipo administrado y los atributos aplicada a ella, la matriz puede ser visitada como una matriz de seguro o un estilo de C array

Tome un vistazo a este artículo: http://msdn.microsoft.com/en- es / library / z6cfh6e6 (v = vs.80) .aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top