问题标签 [dynamicmethod]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
773 浏览

c# - 为方法发出代码时取消装箱 Nullable 使评估堆栈处于意外(对我而言)状态

概述(请原谅我如此详细,但我宁愿它太多也不愿太少):我正在尝试编辑我们解决方案的 Dapper 源,这样当从数据库中读取任何 DateTime 或 Nullable 时,其 DateTime.Kind 属性始终设置为 DateTimeKind.Utc。

在我们的系统中,所有来自前端的 DateTime 都保证为 UTC 时间,并且数据库(Sql Server Azure)将它们存储为 UTC 中的 DateTime 类型(我们不使用 DateTimeOffsets,我们只是始终确保 DateTime在将其存储在数据库中之前是 UTC。)

我一直在阅读有关如何使用 ILGenerator.Emit(...) 为 DynamicMethods 生成代码的所有内容,并且觉得我对它如何与评估堆栈、本地人等一起工作有一个不错的理解。在我努力解决这个问题的过程中问题,我已经编写了一些代码示例来帮助我达到最终目标。我写了一个 DynamicMethod 以一个 DateTime 作为参数,调用 DateTime.SpecifyKind,返回值。那么DateTime也一样吗?类型,使用其 Nullable.Value 属性获取 SpecifyKind 方法的 DateTime。

这就是我的问题所在:在 dapper 中,DateTime(或 DateTime?我实际上并不知道,但是当我将它视为要么我没有得到我期望的结果时)被装箱了。因此,当我尝试使用 OpCodes.Unbox 或 OpCodes.Unbox_Any,然后将结果视为 DateTime 或 DateTime?时,我会收到 VerificationException:操作可能会破坏运行时的稳定性。

显然我错过了一些关于拳击的重要内容,但我会给你我的代码示例,也许你可以帮助我让它工作。

这有效:

我在这里得到了我的期望。耶!但这还没有结束,因为我们要处理拆箱...

这只是直接不会运行。我得到了 VerificationException,然后我在角落里哭了一会儿,直到我准备好再试一次。

我尝试过期待 DateTime 而不是 DateTime?(拆箱后,假设 DateTime 在 eval 堆栈上,而不是 DateTime?)但这也失败了。

有人可以告诉我我错过了什么吗?

0 投票
1 回答
303 浏览

.net - 如何使用 DynamicMethod.CreateDelegate 以实例对象返回字段值

如问题中所述,我有兴趣使用 .net 的动态功能来缓存对象的字段 getter/setter 并在运行时调用它。

使用来自的信息: 有没有办法创建一个委托来获取和设置 FieldInfo 的值?

我已经组合了一个类和函数来设置我需要的功能:

我称这个好代码为:

但是,我被难住的部分是如何修改函数CreateGetter以便能够以缓存形式使用它,例如:(缓存实例对象)

我意识到这可能需要对 IL 代码进行一些修改,CreateGetter但这是我遇到的棘手部分。

0 投票
1 回答
424 浏览

c# - 如何调用动态方法返回数字平方?

我想创建一个简单的动态方法,它返回整数的平方(即 - 如果数字是 5,它应该返回 25)。
我写了下面的代码: -

为什么我会收到“InvalidProgramException”

int retval = hi(42);

我怎样才能让这个东西工作?

0 投票
1 回答
140 浏览

.net - System.Reflection.Emit::DynamicMethod:是否有工具可以从现有程序集生成 IL 代码?

我想用代码创建一个动态方法,这不仅仅是微不足道的。

所以我想创建一个方法体的硬编码版本,并通过一些工具检查它的编译版本,该工具将 OpCos 和参数返回给我,这样我就可以使用ILGenerator::Emit().

有没有这样的工具可用?(也许这是一个愚蠢的问题。不过,我无法使用 Google 找到它。)

0 投票
1 回答
1329 浏览

c# - 有没有办法查看生成的 DynamicMethod 的 IL 代码(在 Sigil 中)?

我正在使用Sigil创建一个DynamicMethod并希望查看生成的 IL。

我以前从未合作过,DynamicMethods所以也许有一个非常明显的答案,但到目前为止我还没有找到任何东西。

这是一个类似的问题,但它已经很老了,我不知道链接工具是否适用于 VS2013 - 我想也许有更新的东西可用。将生成的方法存储在程序集中并将其写入磁盘可能是可行的,但这在开发过程中非常麻烦。

顺便说一句,我知道out string instructionsSigilCreateDelegate方法的参数,但这似乎不是“真正的”IL 代码(包含例如命名标签),我也不确定这是在 Sigil 优化之前还是之后。

编辑:正如@svick 建议的那样,我最终创建了一个动态程序集并将其写入磁盘。然后可以使用 来查看发出的方法的 IL ildasm。如果有人想做同样的事情,这是我使用的代码:

0 投票
1 回答
865 浏览

c# - 通过 DynamicMethod 调用可变参数方法

我正在尝试使用 DynamicMethod 调用非托管的类似 printf 的函数。在运行时我得到一个

BadImageFormatException:找不到索引。(来自 HRESULT 的异常:0x80131124)

这是运行时的限制还是我发出的代码是错误的?

0 投票
0 回答
56 浏览

c# - 如何使用 IL (C#) 实现浅拷贝?

我想用 C# IL 实现一个浅拷贝,而不是直接反射。

• ShallowCopy 版本直接反射:

• 我当前的 IL 版本代码是:

我只知道如何构造一个实例,但我不知道如何复制他人的字段或属性。

有人可以帮我吗?

如果你能帮助我,真的很感激?

0 投票
1 回答
143 浏览

c# - 当泛型事件发生时调用方法

在尝试实现对应在运行时定义的事件触发的方法的调用时,我遇到了问题。我找到了这个答案:

从通用事件处理程序重定向到动态方法

并实现了该解决方案,但是当要调用的方法是实例而不是静态时,我不断收到异常。这是我的部分代码:

我找不到摆脱该异常的方法,如果我将SetFlag()方法设置为静态,则代码可以正常工作,但这不是我需要的。任何建议将不胜感激。提前致谢。

0 投票
1 回答
1694 浏览

c# - DynamicMethod 调用实例方法

如果我从类方法内部创建一个 DynamicMethod,我如何从 DynamicMethod 委托调用我的类的另一个方法?我需要以某种方式在 DynamicMethod 代码中捕获 this 引用。但是我找不到以对象为参数的 ILGenerator.Emit 的重叠版本。

代码到目前为止:

我的问题是标有???

0 投票
2 回答
1135 浏览

c# - 如何创建动态方法来处理事件?

在 C# 中,如何创建可用于处理事件的动态方法?

这是一个事件:

这是一个方法:

如何动态创建处理刷新事件的方法,以便动态方法调用 Test 方法?

上面的 Test 方法是要调用的方法的示例。