2013-12-04 4 views
1

Я пытаюсь выполнить небольшой кусочек JS с помощью следующего кода (используя Native класса из примера Чакры хоста из MSDN):провального минимальный пример выполнения JS в Win 8.1 Чакры с C#

 var runtime = default(JavaScriptRuntime); 
     Native.ThrowIfError(Native.JsCreateRuntime(JavaScriptRuntimeAttributes.None, JavaScriptRuntimeVersion.VersionEdge, null, out runtime)); 

     var context = default(JavaScriptContext); 
     Native.ThrowIfError(Native.JsCreateContext(runtime, (Native.IDebugApplication64)null, out context)); 
     Native.ThrowIfError(Native.JsSetCurrentContext(context)); 

     var script = @"var bob = 1;"; 
     var result = default(JavaScriptValue); 
     var contextCookie = default(JavaScriptSourceContext); 

     Native.ThrowIfError(Native.JsRunScript(script, contextCookie, "source", out result)); 

Проблема в том, что она возвращает ошибку «ScriptCompile» без каких-либо дополнительных сведений, которые я могу определить.

Может ли кто-нибудь выявить то, что я пропустил/сделал глупым/запутался?

+0

я пытался компилировать его, заменив основной метод C# образца и все побежали отлично на моей машине. Я бы попробовал код Джастина ниже, чтобы узнать, сможете ли вы получить более подробную информацию об ошибке, чтобы выяснить, что происходит. – panopticoncentral

+0

Вы пытались запустить его как поток STA? Я не уверен, что это необходимо или нет. –

ответ

3

Я сомневаюсь, что вы все еще боретесь с этим ... но я просто сделал и понял ответ.

Если вы посмотрите в jsrt.h, вы увидите, что все собственные функции используют wchar_t при использовании строковых параметров, однако атрибут DllImport не указывает кодировку, поэтому по умолчанию используется ANSI.

я сделал найти/заменить в файле Native.cs и изменил все DllImport атрибуты читать ...

[DllImport("jscript9.dll", CharSet = CharSet.Unicode)]

... и теперь мой код работает отлично. Я отправил запрос на получение запроса владельцу образца на GitHub, чтобы получить это исправление. Обновление в настоящее время в моей вилке на https://github.com/billti/chakra-host

0

Я изменил мою реализацию Native.ThrowIfError, чтобы в случае ошибки ScriptCompile получить некоторые значения из объекта errorObject. Например:

var message = errorObject 
    .GetProperty("message") 
    .ToString(); 
var source = errorObject 
    .GetProperty("source") 
    .ToString(); 
var line = (int)errorObject 
    .GetProperty("line") 
    .ToDouble(); 
var column = (int)errorObject 
    .GetProperty("column") 
    .ToDouble(); 
var length = (int)errorObject 
    .GetProperty("length") 
    .ToDouble(); 

throw new JavaScriptParseException(error, message, source, line, column, length); 

Это должно дать вам больше информации.

1

Попробуйте добавить это в файл AssemblyInfo.cs:

[module: DefaultCharSet(CharSet.Unicode)] 

 Смежные вопросы

  • Нет связанных вопросов^_^