问题标签 [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 投票
6 回答
6849 浏览

c# - 根据数据库中的数据动态调用 C# 方法

我的老板让我研究计算引擎。实际上,用户将拥有一个可以执行计算的数据表。他们还将能够根据我们强制执行的某些限制构建自己的计算(然后将构建的计算存储在数据库中)

是否可以在 C# 中调用特定方法,具体取决于数据库中存储的内容?因此,如果数据库说,计算应该执行标准偏差。当我们从数据库中获取该信息时,是否可以调用我们将在 C# 中使用的标准偏差方法?

我希望这很清楚。

0 投票
2 回答
1815 浏览

c# - 动态 IL 方法导致“操作可能会破坏运行时”

System.Security.VerificationException:操作可能会破坏运行时的稳定性。在 Connance.CommunicatorApi.ReportApiClient.AcknowledgeRecallsAsyncDynamicHandler(对象,AcknowledgeRecallsCompletedEventArgs)

这就是我得到的错误。我正在尝试做的(背景)是为一类方法创建一个全局事件处理程序。我正在使用 WCF 中的静态代理,我需要创建一个层来跟踪所有调用并返回到所有 WCF Web 方法。不幸的是,WCF 强烈键入“已完成”事件的 EventArgs,这几乎是不可能的。

我决定尝试一下。如果事件是EventHandler<SomeSpecificEventArgs>,我仍然可以注册一个签名方法void Method(object, object)来处理该事件。伟大的。所以我开始创建一个DynamicMethod调用我的全局处理程序的函数,并将它注册到每个事件中。

我尝试了两种方法:

1) DynamicMethod 是 void (object, object) 类型

2) void (object, SomeSpecificEventArgs) 类型——我为此使用通用方法来获取类型。

只有当我尝试手动或为事件调用该方法时,才会出现上述异常。

这是我的代码:

编辑:我明白了。原来我还有另一个问题。我在 Silverlight 工作。我设法在一个单独的项目中重现了我的场景,并通过使用DynamicMethod允许您设置所有者的重载来使其工作。然后我指定

DynamicMethod dm = new DynamicMethod("TestMethod2", typeof(void), new[] { typeof(MyClass), typeof(string), typeof(string) }, typeof(MyClass));,

并使用ldarg.0,ldarg.1ldarg.2. 但这是一个安全关键的构造函数,不会在 silverlight 上运行。我只是不确定我需要如何设置它。我是否将Handler公共设为静态并加载 args 0-1?我最终得到这样的错误:

通过方法 'DynamicClass.TestMethod2(System.String, System.String)' 尝试访问方法 'dynamicass.MyClass.Handler(System.String, System.String)' 失败。"}

0 投票
1 回答
395 浏览

.net - 在 Silverlight 中使用 DynamicMethod 时出现 VerificationException

我想通过委托调用某些方法,但得到了 VerificationException。我正在使用以下代码:

基本上,我想打电话

this.Startup += this.Application_Startup;

通过使用上述代码的委托。

这给出了 VerificationException: Operation 可能会破坏运行时异常。

通过将此代码放入全新 Silverlight App 项目的 App 构造函数中,这很容易重现。我究竟做错了什么?

0 投票
2 回答
3159 浏览

.net - 如何通过 ILGenerator.Emit* 调用“正常”方法?

DynamicMethod 是否可以调用(例如通过 ILGenerator.EmitCall 或类似方法)“正常”方法,例如 Private Sub BlahBlah(ByVal obj as Object)?

提前致谢

0 投票
2 回答
1463 浏览

.net - 将 DynamicMethod 保存到磁盘

我继承了使用 DynamicMethod 在运行时生成方法的代码。我还需要修改一些正在生成的代码。

由于我是 MSIL 的一名 n00b,我希望能够在 Reflector 中加载生成的代码,并确保代码执行我所祈祷的操作;)

只是,我不知道如何将“匿名托管的 DynamicMethods 程序集”序列化到磁盘。这可能吗?如果是这样,怎么做?

0 投票
1 回答
919 浏览

c# - DynamicMethod.CreateDelegate 的异常,几乎相同的 MSDN 示例

当我调用 CreateDelegate(delegateType) 时,我得到一个System.ArgumentException,根据 MSDN,这是因为 delegateType 的参数数量或参数类型错误。

奇怪的是我使用的代码几乎都是从 MSDN 复制的。我的整体功能:

如您所见,评论甚至在那里。你也可以看到我有 delParams 和 handlerParams 变量,它们具有相同数量的相同类型的参数。

这里发生了什么?

MSDN:http: //msdn.microsoft.com/en-us/library/ms228976.aspx

编辑:我试图绑定到的事件:

0 投票
1 回答
1408 浏览

c# - C# 使用反射调用公共非静态方法而不实例化其类

是否可以在 C# 中调用方法(非静态)而不实例化其类,例如:

我已经使用 System.Reflection.Emit 命名空间尝试了这种方法,我将 MyMethod() 的 IL 复制到了动态方法中,但出现了异常:

检测到 FatalExecutionEngineError :运行时遇到致命错误。错误地址位于线程 0x2650 上的 0x5dceccf5。错误代码为 0xc0000005。此错误可能是 CLR 中的错​​误或用户代码的不安全或不可验证部分中的错误。此错误的常见来源包括 COM 互操作或 PInvoke 的用户封送错误,这可能会损坏堆栈。

谢谢

0 投票
1 回答
590 浏览

c# - 在不使用 ref 关键字的情况下替换参数的 ref(使用 IL)

我希望能够替换参数的对象引用,而不必使用 ref 关键字。

我避免使用 ref 的原因是为了保留寻找Add(T item)方法的集合初始化程序调用,并且我需要让集合类用它的接口的不同实现替换引用。

我尝试了几种不同的方法来做到这一点。首先,我尝试使用未记录的关键字__makeref,__refvalue__reftype.

其次,我尝试DynamicMethod使用一些 IL 创建一个,该 IL 试图模仿我通过查看带有 ref 参数的反汇编的类似调用所观察到的内容。

下面是一些代码来演示:

谢谢你。

0 投票
1 回答
2002 浏览

delphi - Delphi中如何使用SuperObject调用使用Object作为参数的方法?

我们可以使用 SuperObject 库通过其名称调用某个对象的方法,并使用 SOInvoker 方法将其参数作为 json 字符串提供,如this answer

我想知道如何将创建的对象作为参数发送。我试着发送它

但在 MyMethod 内部 LObjectList 引用丢失了。

我究竟做错了什么?

超级对象库可以在这里下载

0 投票
1 回答
244 浏览

c# - 为什么我不能将 DynamicMethod 绑定到结构实例?

DynamicMethods 允许您为您创建的委托指定目标实例。但是,当您使用结构类型时,这似乎不起作用。它失败并出现异常,告诉我它无法绑定到此方法。错误是因为我的 IL 没有拆箱目标实例吗?

如果我在这里将 A 更改为一个类,它可以正常工作。我究竟做错了什么?(另外请不要建议调用Delegate.CreateDelegate绑定到带有目标实例的GetType方法)

这是一个示例复制:

注意:我正在Emitted为 IL 的流利界面使用该库。此外,这里是 CodeGen 方法的代码。