2009-08-05 4 views
0

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

+0

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? –

Antwort

3

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.

+0

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

+0

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. –

+0

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