我正在编写一个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()方法。我甚至没有尝试过任何其他的东西。
所以我有两个问题:
提前致谢
答案 0 :(得分:0)
事实证明这很简单:
Type t = theScript.GetType();
object ret = t.InvokeMember(theObject, BindingFlags.InvokeMethod, null, theScriptName, new object[] { });