수학 함수를 사용하고 주어진 x에 대한 y 값을 계산하는 함수 플로터를 다시 작성하기 시작했습니다. 다시 쓰려면 IL을 사용하여 동적으로 메서드를 만들고 싶습니다. 필자가 지금 가지고있는 테스트 일리노이 코드는 2 LocalBuilders를 사용하고 그것을 곱합니다. 그러나, 내가 값을 반환하면, 난 진짜 대답 대신에 난수를 받는다.C#에서 IL 리턴이 잘못된 값을 반환합니다.
다음 코드를 사용하고 있습니다.
ILGenerator il = hello.GetILGenerator();
LocalBuilder a = il.DeclareLocal(typeof(int));
LocalBuilder b = il.DeclareLocal(typeof(int));
LocalBuilder multOfAandB = il.DeclareLocal(typeof(int));
il.Emit(OpCodes.Ldc_I4, 5); // Store "5" ...
il.Emit(OpCodes.Stloc, a); // ... in "a".
il.Emit(OpCodes.Ldc_I4, 6); // Store "6" ...
il.Emit(OpCodes.Stloc, b); // ... in "b".
il.Emit(OpCodes.Ldloc, a);
il.Emit(OpCodes.Ldloc, b);
il.Emit(OpCodes.Mul); // Multiply them ...
il.Emit(OpCodes.Ret); // ... and return the result.
이것은 30을 반환해야하지만 현재 4.2038953929744512E-44입니다. 함수가 잘못된 값을 반환하도록 만드는 코드에 문제가 있습니까? 다음과 같이 함수를 호출하는 코드는 사전
편집
에서
감사 :
object[] invokeArgs = { 42 };
object obj = func.helloMethod.Invoke(null, BindingFlags.ExactBinding, null, invokeArgs, new CultureInfo("en-us"));
하고 나중에 FUNC에서 호출 할 수있는 기능을 저장할 내 수업에서
. helloMethod는 다음과 같이 정의되는 DynamicMethod를 가지고 있습니다 :DynamicMethod hello = new DynamicMethod("Hello",
typeof(double),
helloArgs,
typeof(double).Module);
괜찮아요 ... 어떻게 검색하고 결과를 보여주고 있습니까 (특히'multOfAandB'가됩니까?), 코드의 해당 부분이 아닌 실행 문제가 의심 스럽습니다. 난수는 초기화되지 않은 메모리입니다. – dlatikay
내 메인에서 @dlatikay 나는 'object [] invokeArgs = {42};를 호출하고 있습니다. 개체 obj = func.helloMethod.Invoke (null, BindingFlags.ExactBinding, null, invokeArgs, 새 CultureInfo ("en-us")); ' 내 동적 방법은 'DynamicMethod hello = new DynamicMethod ("Hello", typeof (double), helloArgs, typeof (double) .Module)입니다. 'DynamicMethod를 내 메인 + – Felix
에서 호출하는 공용 변수에 저장하려고합니다. 나머지 호출 코드는 [this] (https://msdn.microsoft.com/en-us)와 유사하게 구성되어 있다고 가정 할 수 있습니다. /library/csx7wsz2(v=vs.110).aspx); 그리고 당신의 42는 결코 Ldarg_0'ed되지 않습니다 - 여전히 발신자/피 호출자 문제가 의심됩니다 – dlatikay