Вызов строковой функции javascript в браузере из Unity возвращает null

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

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

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

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

        return endpoint;
     }
};

mergeInto(LibraryManager.library, BrowserPlugin);

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

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

string endpointURL = GetEndpointURL();

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


person James Hogle    schedule 14.01.2017    source источник


Ответы (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;
}
person Programmer    schedule 14.01.2017