2009-08-03 19 views
0

Ich habe ein kleines ActiveX-Steuerelement mit C# erstellt. Ich habe eine Funktion, die ein Array von Bytes zurückgibt. Aus irgendeinem Grund, wenn ich versuche, das zurückgegebene Array in js zu konsumieren, erhalte ich einen undefinierten Wert. Warum passiert das? Gibt es da eh etwas zu lösen?Rückgabe eines Bytearrays von ActiveX an Javascript

Hier ist eine einfache Demonstration von meinem Code:

Activex:

[ComVisible(true)] 
     public byte[] Close() 
     { 
      try 
      { 
       MessageBox.Show("called from activex Close"); 
       return Stop(); 
      } 
      catch (Exception e) 
      { 
       //ExceptionHandling.AppException(e); 
       throw e; 
      } 
     } 

Javascript Call:

function CloseActiveX(){ 
var myRslt = document.OurActiveX.Close(); 
} 
+0

Können Sie den Code hinzufügen, der nicht funktioniert? – Freddy

Antwort

1

Sie haben nicht gezeigt, was die Stop() -Methode enthält. Wenn Stop() null zurückgibt, sollten Sie erwarten, dass Sie sehen, was Sie sehen.

Wie es aussieht, sieht es jedoch so aus, als ob Ihr ActiveX-Steuerelement in .NET geschrieben ist. Dies ist eine schlechte Idee aus unzähligen Gründen, nicht zuletzt die Leistung wird niedrig sein, und Sie werden Probleme auftreten, wenn andere Steuerelemente oder Erweiterungen im Browser ausgeführt werden, die eine andere Version des Frameworks möchten.

Abgesehen von diesem Problem ist das wahrscheinliche Problem, dass die byte[] nicht zu dem Aufrufer auf eine Weise zurückgemagert wird, die seine Verwendung ermöglicht. Sie müssen einen VARIANT mit den folgenden Eigenschaften zurückgeben: ARRAY, BYREF, U1.

Default Marshaling for Arrays kann nützlich sein.

Verwandte Themen