2012-05-28 6 views
0

모두, 런타임시 내 애플리케이션에서 호출 할 C# DLL 수가 System.Reflection입니다. 내가 사용하는 핵심 코드는 내가이 DLL 내부에 무슨 일이 있었는지에서 정보를 추출 할 수 있도록 내가 ref로 DLL에 매개 변수의 배열을 전달하는 방법을 알고 싶습니다리플렉션을 통해 C# DLL에 대한 참조로 파라미터 배열 전달

DLL = Assembly.LoadFrom(Path.GetFullPath(strDllName)); 
classType = DLL.GetType(String.Format("{0}.{0}", strNameSpace, strClassName)); 
if (classType != null) 
{ 
    classInstance = Activator.CreateInstance(classType); 
    MethodInfo methodInfo = classType.GetMethod(strMethodName); 
    if (methodInfo != null) 
    { 
     object result = null; 
     result = methodInfo.Invoke(classInstance, parameters); 
     return Convert.ToBoolean(result); 
    } 
} 

같은 것입니다. 내가 원하는 (하지만 물론 컴파일되지 않습니다) 어떤 명확한 묘사는 내가 이것을 달성 할 수있는 방법

result = methodInfo.Invoke(classInstance, ref parameters); 

것입니까?

+0

도움이 될만한 정보가 있습니다. http://stackoverflow.com/questions/1551761/ref-parameters-and-reflection – Dennis

답변

2

ref 매개 변수의 변경 내용은 MethodInfo.Invoke에 전달 된 배열에 반영됩니다. 당신은 사용

문제의 매개 변수 (제목에 따라) 매개 변수 배열을 경우, 당신은 arrayness의 다른 수준에 그 포장 할 필요가 있습니다
object[] parameters = ...; 
result = methodInfo.Invoke(classInstance, parameters); 
// Now examine parameters... 

: 지금까지와 같은

object[] parameters = { new object[] { "first", "second" } }; 

을 CLR은 단지 하나의 매개 변수 일뿐입니다.

문제가 해결되지 않으면 짧지 만 보여주십시오 완벽한 예 - 당신은 입증하기 위해 별도의 DLL을 사용하는 반사에 의해 호출되는 단지 Main 방법과 콘솔 응용 프로그램과 방법이 필요하지 않습니다해야 좋아.

+0

대단히 감사합니다. Jon. 나는 이전에'result = methodInfo.Invoke (classInst, new object [] {dllParams}); '를하고 있었지만 이것이 내가하고있는 일이라는 것을 인식하지 못했습니다. 나는 이것을 지금 시도하고 너에게 돌아갈 것이다. 시간 내 주셔서 다시 한번 감사드립니다. – MoonKnight