Я пишу библиотеку C# COM, которая будет использоваться как управляемыми C#, так и программами Delphi и C++ и javascript. COM-библиотека COM содержит часть монитора, в которой приложение регистрирует функцию, которая должна возвращать строковое значение в dll. Я сделал это раньше для приложений javascript, где вы просто передадите функцию как параметр в dll. Когда DLL должен запросить JavaScript «приложение» следующее: запуститьПередача параметра IDispatch из C#
Type t = theScript.GetType();
object ret = t.InvokeMember("", BindingFlags.InvokeMethod, null, theScript, new object[] { });
«theScript» хранится как объект в DLL C#. Насколько я понимаю, это достигается IDispatch. Моя теория теперь заключается в том, что я должен использовать один и тот же подход для других языков. Так что я сделал видимый метод COM с этой подписью:
void RegisterQuery(object method);
Однако я не могу понять, как передать параметр в этот метод из C#. Я попытался использовать делегат, но вызов делегата просто возвращает метод ToString() из делегата (тот, который возвращает имя calss). Ничто другое, что я пробовал, даже компилируется.
Поэтому у меня есть два вопроса:
- Как мне передать параметр метода в этой DLL из C# так, что DLL будет иметь возможность вызывать методы, в указанном выше порядке, когда это необходимо ?
- Действительно ли это IDispatch или есть другая причина, почему он работает для javascript?
Заранее спасибо