Ich habe diese kleine Webanwendung, die ich gebaut habe. Es hat eine ActiveX-Kontrolle, die nicht verwalteten Code über Javascript in eine Silverlight-Anwendung zurückgibt. In silverlight führe ich einen Marshalling-Vorgang für den zurückgegebenen Wert durch. Wenn ich nur die einfache Operation von GetSize() ausführe, bekomme ich einen Stupefing-Fehler. Das bringt mich zu meiner Frage: Ist es möglich, einen Marshsalling-Vorgang in Silverlight durchzuführen, wenn ja, wie?Marshalling unmanaged Code in Silverlight
Antwort
Das Sicherheitsmodell und die Sandbox von Silverlight erlauben nicht "transparent" (Benutzercode und Anwendungen) p/Aufrufe, vertrauenswürdige Operationen oder ähnliches auszuführen.
Wenn bereits ein ActiveX-Steuerelement installiert und für die Webseite verfügbar ist, müssen Sie die HTML-Interoperabilitätsfunktionen von Silverlight verwenden, um die Daten selbst zu erstellen. Es gibt eine MSDN article about the HTML bridge, die spezifisch für Silverlight 2 ist, aber Sie werden es auch in neueren Versionen von Silverlight finden.
Dies setzt voraus, dass Ihr ActiveX-Steuerelement bereits durch das Durchsuchen von Skripts/JavaScript zugänglich ist.
Obwohl das Marshalling von Zahlen und einigen anderen Primitiven in der Plattform gut funktioniert, werden Sie wahrscheinlich alle Ihre Daten aus dem ActiveX-Steuerelement mithilfe von Zeichenfolgen verschieben und dann auf dem Silverlight-Client analysieren.
Dies könnte zumindest Ihr Szenario aktivieren.
Ich versuche, ein Array von Bytes von ActiveX über Javascript und in Silverlight zu übergeben. Da JavaScript nur nativen, nicht verwalteten Code unterstützt, kann ich mein Byte-Array nicht senden. Daher dachte ich daran, eine einfache Marshalling-Orpeation durchzuführen, die ebenfalls fehlschlägt ... Gibt es eine Möglichkeit, dies zu umgehen? – vondip
Sie können dieses Array von Bytes möglicherweise codieren. Können Sie in JavaScript das Byte-Array durchlaufen und jedes in eine hexadezimale Zeichenfolge konvertieren? Sie können das dann an Silverlight weiterleiten. Die HTML-Interoperabilitäts-Funktion ist der Weg, um dies zu erreichen, aber Sie müssen etwas Arbeit dazwischen tun. –
wow, ich habe eine riesige Byte-Array (ich meine, wirklich groß, etwas ähnlich wie ein Bild zu kodieren) ist das der einzige Weg zu gehen? – vondip
Hallo, könnten Sie in Erwägung ziehen, weitere Informationen hinzuzufügen - den stupefing-Fehler oder weitere Informationen darüber, wo Ihre GetSize() -Operation existiert? –