是否可以使用编组将JavaScript回调方法设置为C#方法?

时间:2016-08-04 20:55:15

标签: javascript c# unity3d marshalling unity-webgl

我使用C#在Unity中编码并为WebGL开发。我需要使用浏览器JavaScript,所以编写了一个.jslib,我使用编组来调用C#中的方法。

是否可以将JavaScript回调设置为C#Action,Func或Event Handler,如下所示:

// Javascript in .jslib called from C# using static extern
// action being the C# method that I want to call
// On callback I get -> TypeError: action is not a function
SetOnOpen: function (action) {
    $jsobj.onopen = function () {
        action();
    };
},

我已经尝试了其中的每一个,但似乎没有正确地做到这一点。我知道C ++可以调用C#函数,但JavaScript必须以某种方式进行不同的通信。

尝试:

[DllImport("__Internal")]
private static extern void SetOnOpen(ref OnOpenHandler handler);

[DllImport("__Internal")]
private static extern void SetOnOpen(ref Action action);

[DllImport("__Internal")]
private static extern void SetOnOpen(IntPtr handler);

无论我尝试什么,我都会得到一个TypeError,说明我传递给JavaScript的对象不是函数。我试过了:

  • 使用操作和事件代理
  • 使用ref,IntPtr,而不是

任何人都知道这是否可能?就像我说的那样,我之前在C ++ .dll中成功地调用了一个C#方法,因此可以从.jslib中做到这一点。

1 个答案:

答案 0 :(得分:0)

根据我的经验,使两者进行通信的唯一方法是使用SendMessage。如果需要携带多个参数,可以附加数组。

相关问题