从C#传递IDispatch参数

时间:2013-04-19 13:05:50

标签: c# javascript .net com-interop idispatch

我正在编写一个C#COM dll,它将被Managed C#以及Delphi和C ++程序以及javascript使用。 COM dll包括一个监视器部分,其中应用程序注册一个函数,该函数应该将字符串值返回给dll。我之前已经为javascript'应用程序'做了这个,你只需要将一个函数作为参数传递给dll。当dll需要查询javascript'应用程序'时,运行以下命令:

Type t = theScript.GetType();
object ret = t.InvokeMember("", BindingFlags.InvokeMethod, null, theScript, new object[] { });

'theScript'作为对象存储在C#dll中。据我所知,这是由IDispatch完成的。我现在的理论是,我应该可以对其他语言使用相同的方法。所以我使用这个签名制作了一个COM可见方法:

void RegisterQuery(object method);

但是我无法弄清楚如何从C#向这个方法传递一个参数。我尝试使用委托,但调用委托只是从委托(返回calss名称的那个)返回ToString()方法。我甚至没有尝试过任何其他的东西。

所以我有两个问题:

  1. 如何将方法参数从C#传递给此dll,以便dll能够在需要时以上面指定的方式调用方法?
  2. 这真的是IDispatch,还是有其他原因可以用于javascript?
  3. 提前致谢

1 个答案:

答案 0 :(得分:0)

事实证明这很简单:

Type t = theScript.GetType();
object ret = t.InvokeMember(theObject, BindingFlags.InvokeMethod, null, theScriptName, new object[] { });