2017-01-14 13 views
1

У меня есть проект единства WebGL, который пытается выполнить javascript-код в браузере и вернуть значение.Вызов функции javascript string в браузере из Unity возвращает null

У меня есть следующий .jslib файл в моей папке Assets/Plugins/WebGL:

var BrowserPlugin = { 
    GetEndpointURL: function() 
    { 
     var endpoint = window.itd.getEndpointUrl(); 

     console.log("endpoint: " + endpoint); 

     return endpoint; 
    } 
}; 

mergeInto(LibraryManager.library, BrowserPlugin); 

В моей C# код в единстве, я импортировать библиотеки DLL и вызвать мой яваскрипта метод следующим образом:

[DllImport("__Internal")] 
private static extern string GetEndpointURL(); 

string endpointURL = GetEndpointURL(); 

Проблема в том, что в моем коде C# переменная endpointUrl всегда равна нулю. Однако в моей консоли браузера я могу ясно видеть, что правильное значение регистрируется в JavaScript-браузере, прежде чем я его верну. Что заставляет это значение возвращаться к единству как null?

ответ

1

Это ваш код:

GetEndpointURL: function() 
{ 
    var endpoint = window.itd.getEndpointUrl(); 
    console.log("endpoint: " + endpoint); 
    return endpoint; 
} 

Вы не можете возвращенная строка (endpoint) непосредственно. Вы должны создать буфер для хранения этой строки, и этот процесс включает выделение памяти с помощью _malloc и копирование старой строки в эту новую ячейку памяти с помощью writeStringToMemory.

GetEndpointURL: function() 
{ 
    var endpoint = window.itd.getEndpointUrl(); 
    console.log("endpoint: " + endpoint); 

    var buffer = _malloc(lengthBytesUTF8(endpoint) + 1); 
    writeStringToMemory(endpoint, buffer); 
    return buffer; 
} 

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

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