Frage

Bisher habe ich eine Komponente in C# .NET 4 erstellt und system.Enterprisesservices verwendet, um es sichtbar zu machen. Ich möchte Geschäftsmethoden in C#entwickeln, aber ich muss immer noch von Classic ASP (VBScript) auf sie zugreifen.

So weit so gut, alles funktioniert gut (Exept -Funktion Überladung :)). Jetzt habe ich eine Testklasse gemacht, um mehr Ablauf mit Rückgabecode zu erzielen.

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

  }
}

Dann habe ich gerade eine einfache VBScript -Datei erstellt, um sie mit cscript.exe zum Testen von Porpuse auszuführen.

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

Was funktioniert gut:

string, int, foat, double

Wenn es um Array, Jaggedarray oder Wörterbücher geht, bekomme ich eine Art Missverhältnis. Vartype ist ein 13 -Objekt für das Wörterbuch, z.

Ich habe den ganzen Tag mit CodeProject.com und Stackoverflow überprüft und keinen Hinweis gefunden, der einen Thread auf Stackoverflow ausgeht, in dem jemand erwähnt wird, dass eine Idispatch -Schnittstelle erstellt werden muss.

Also hatte jemand jemals das gleiche Problem und kann mir helfen oder mir ein paar Hinweise geben, mit denen ich weitermachen kann?

War es hilfreich?

Lösung

  1. Lektion: Lassen Sie .NET Ihre Marshalas umgehen :)

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

Dies ist ein Array, auf das ich von VBScript aus zugreifen kann. Der Hinweis ist, dass es Objekt sein muss [].

Jetzt arbeite ich an einer Lösung für gezackte Arrays und Wörterbücher ...

Andere Tipps

Übergeben von Arrays an COM: Alle verwalteten Array -Typen können an nicht verwalteten Code aus dem verwalteten Code übergeben werden. Abhängig vom verwalteten Typ und den darauf angewandten Attributen kann auf das Array als sicheres Array oder ein C-Array zugegriffen werden

Schauen Sie sich diesen Artikel an:http://msdn.microsoft.com/en-us/library/z6cfh6e6(v=vs.80).aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top