2

我有一个 WebGL 统一项目,它尝试在浏览器上执行 javascript 代码并返回一个值。

.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 并调用我的 javascript 方法,如下所示:

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

string endpointURL = GetEndpointURL();

问题是,在我的 c# 代码中,endpointUrl变量始终为空。但是,在我的浏览器控制台中,我可以清楚地看到在返回之前在浏览器 javascript 中记录了正确的值。是什么导致这个值回到统一为空?

4

1 回答 1

2

这是你的代码:

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;
}
于 2017-01-14T21:14:48.243 回答