小编cth*_*m06的帖子

我在IL中犯了错误吗?我没看到?

我正在使用编译器System.Reflection.Emit,我得到JIT限制错误,我无法弄清楚.问题出现在我的函数句柄实现中.即生成代码

function foo() { }
f = foo;
f();
Run Code Online (Sandbox Code Playgroud)

由于我无法控制的规范,语言是动态类型的,所以我不知道f在编译时会有多少参数.为了解决这个问题,我生成了一个新方法,而不是发出一个Ldftnfor foo,?foo它接受一个在调用表达式中给出的参数数组,然后将它们推送到eval堆栈中foo.CLR允许这样做吗?

我现在得到的是"JIT遇到内部限制"异常(或者"CLR检测到无效程序",如果我保存程序集并运行它而不是从内存中调用它),堆栈跟踪显示它发生在?foo.这就是我正在生成的IL.

.method private instance class [MylibInterop]MylibInterop.MylibValue 
        '?foo'(class [MylibInterop]MylibInterop.MylibValue[] A_1) cil managed
{
  // Code size       90 (0x5a)
  .maxstack  10
  .locals init (int32 V_0,
           int32 V_1)
  IL_0000:  ldarg.1
  IL_0001:  call       instance int32 [mscorlib]System.Array::get_Length()
  IL_0006:  stloc.0
  IL_0007:  ldloc.0
  IL_0008:  ldc.i4     0x0
  IL_000d:  ble        IL_001d
  IL_0012:  ldstr      "Too many arguments to lambda call"
  IL_0017:  newobj     instance void [mscorlib]System.Exception::.ctor(string)
  IL_001c: …
Run Code Online (Sandbox Code Playgroud)

c# il reflection.emit

8
推荐指数
1
解决办法
248
查看次数

如何使一个函数重复自己

我有一个python问题,我正在读取XML并设置了两个扩展函数; 一个找到一个位置,而另一个函数找到一个位置在第一个位置内,并返回信息.我的问题是我需要这个继续向下页面并找到每个的其他事件.我不确定这是否是现在如此heres代码的一个很好的解释:

def findEntryTag(webPage):
 start= webPage.find("<entry>") +7
 end= webPage.find("</entry>")
 slicedString=webPage[start:end]
 return slicedString

def findEarthquake(webPage):
 slicedString=findEntryTag(webPage)
 start= slicedString.find("<title>") +7
 end= slicedString.find("</title>")
 eq= slicedString[start:end]
 return eq

my Earthquake= findEarthquake(text)
print (myEarthquake)
Run Code Online (Sandbox Code Playgroud)

所以需要它再次执行功能以获得另一个地震并打印出它们的孔列表.请帮忙!谢谢

python

0
推荐指数
1
解决办法
1240
查看次数

标签 统计

c# ×1

il ×1

python ×1

reflection.emit ×1