我正在编写一个 C# COM dll,托管 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() 方法。我尝试过的其他任何东西都无法编译。
所以我有两个问题:
- 我应该如何从 C# 将方法参数传递给这个 dll,以便 dll 能够在需要时以上面指定的方式调用方法?
- 这真的是 IDispatch 还是它适用于 javascript 的另一个原因?
提前致谢