2013-04-19 2 views
0

저는 Managed C#뿐만 아니라 Delphi 및 C++ 프로그램과 javascript에서 모두 사용할 C# COM DLL을 작성하고 있습니다. COM dll에는 dll에 문자열 값을 반환해야하는 함수가 응용 프로그램에 등록되는 모니터 부분이 포함되어 있습니다. 전에 DLL을위한 매개 변수로 함수를 전달할 자바 스크립트 '응용 프로그램'에 대해이 작업을 수행했습니다. DLL이 자바 스크립트 '응용 프로그램'다음 실행할 쿼리 할 필요가있는 경우 :C#에서 IDispatch 매개 변수 전달

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

'theScript'을 C#을 DLL의 Object로 저장됩니다. 내가 아는 한이 IDispatch에 의해 수행됩니다. 내 이론은 이제 다른 언어에도 동일한 접근법을 사용할 수 있어야한다는 것입니다. 그래서이 서명으로 COM으로 볼 수있는 메서드를 만들었습니다.

void RegisterQuery(object method); 

그러나 C#에서이 메서드에 매개 변수를 전달하는 방법을 알 수 없습니다. 대리자를 사용하여 시도했지만 대리자를 호출하면 대리자 (calss 이름을 반환하는)에서 ToString() 메서드가 반환됩니다. 내가 컴파일하려고 시도한 것은 없다. 그것은가 필요로 할 때 DLL이 메소드를 호출 할 수 있도록 내가 위에 지정된 방식으로, C에서 #이 DLL에 메서드의 매개 변수를 전달해야하는 방법

  1. :

    그래서 나는이 개 질문이 ?

  2. 이것은 실제로 IDispatch입니까, 아니면 자바 스크립트에서 작동하는 또 다른 이유입니까? 사전에

감사

답변

0

이 정말 간단한 것을 밝혀 :

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