2013-04-19 3 views
0

Я пишу библиотеку 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). Ничто другое, что я пробовал, даже компилируется.

Поэтому у меня есть два вопроса:

  1. Как мне передать параметр метода в этой DLL из C# так, что DLL будет иметь возможность вызывать методы, в указанном выше порядке, когда это необходимо ?
  2. Действительно ли это IDispatch или есть другая причина, почему он работает для javascript?

Заранее спасибо

ответ

0

Оказывается, что это было очень просто:

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

 Смежные вопросы

  • Нет связанных вопросов^_^