我有一个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
变量始终为null。但是,在我的浏览器控制台中,我可以清楚地看到在返回之前在浏览器javascript中记录了正确的值。是什么导致这个值回到统一为零?
答案 0 :(得分: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;
}