问题标签 [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.
c# - C#动态方法:返回整数的字符串表示
我想创建一个动态方法,它接受Int32
参数并返回它的字符串表示:
但该方法因异常而失败Object reference not set to an instance of an object
。我错过了什么?
更新:我检查了我的方法的 C# 版本的 MSIL:
我发现我需要在调用之前从堆栈中弹出整数intToString
。完整版本:
现在它可以工作了。
c# - 使用反序列化将 IL 方法转换为 C# 代码
可能是转储问题,因为我是 DynamicMethod 的新手,所以请指导我。
我有 C# 方法存储,它在二进制文件中序列化。以这种方式存储的数据。
我正在使用 DynamicILInfo 从这些信息中生成 DynamicMethod。我想知道如何从这个 IL 方法编解码器信息中获取人类可读的 c# 代码?
[编辑]
好的,所以我能够根据这些信息构建 DynamicMethod 并使用 ILVisulizer 获得 IL 代码,显示在https://github.com/drewnoakes/il-visualizer
当发送 IL 到监视器时,我得到以下类似的指令代码
现在想知道如何使用编程将此代码反编译为 c#?
c# - 通过 DynamicMethod 调用方法 - Reflection.Emit
为了动态调用各种类型的 TryParse ( , , ) ,我对这个答案进行了稍微修改的类。char
int
long
不幸的是,这引发了一个问题AccessViolationException
,在更详细地检查了代码之后,我仍然不确定为什么。
此代码还在另一个项目中“运行”,其中返回值似乎不一致。有时它只是false
在实际解析TryParse
成功时返回。这听起来像是未定义的行为,但我似乎找不到问题。
这是AccessViolationException
AND 未定义行为的示例代码(从数组中删除 UB 的浮点值)。
- UB的问题是什么?
- 为什么
AccessViolationException
?另一个问题或与 UB 相关?
c# - 在 C# 中调用动态方法时如何传递 Struct 参数?
我在动态方法中传递结构参数时遇到问题。这是我的代码:
当我将代码运行到Process
方法参数时,arg2
发现“FatalExecutionEngineError”无法读取内存。
但是,如果我将第二个参数更改为MyStruct
喜欢
它工作正常,但这不是我想要的。
我认为我的 IL 代码不正确,但我不知道它在哪里。
c# - 提高 object.GetType().GetProperties() 和 PropertyInfo.GetValue(object) 性能
我有这个代码片段,它遍历泛型类型属性并提取每个属性的值。我知道反射可能是一个巨大的性能瓶颈,并且可以使用委托/DynamicMethod/ILGenerator 对其进行改进。然而,掌握这些是相当困难的。关于如何使用其中一种方法的示例将非常棒。
c# - 创建动态方法的弱委托(ref object,object[] arr)
源代码:https ://www.pastefile.com/4mzhyg
我正在尝试创建格式委托:
弱类型函数:
委托创建者:
和 IL 代码生成器:
我正在使用的 stuct 示例是 Vector3 和 Set 方法:
所以我在做:
永远不要到达正在执行的委托,但是当它调用 Delegate.CreateDelegate 时它会崩溃:
见行:dynMethod.CreateDelegate(typeof(TDelegate));
有错误:
InvalidProgramException: Invalid IL code in (wrapper dynamic-method) object:MC<> (object&,object[]): IL_004f: call 0x00000009 裁判实际 IL 代码在 emit.call(method) 处有错误,但是当我使用辅助函数时:
这将生成 my.dll 并使用 ILSpy 打开我可以看到来自相同 IL 代码的方法生成得很好。
reactjs - 我如何在反应钩子中动态调用方法
在我的 React 钩子中,我定义了两个用于设置变量的函数:
setProjectMiddleCode
和setProjectToolCode
.
我希望在我的反应钩子中调用这两个方法以避免重复代码。
我想这样做:
我当前的代码:
c# - 如何在 DynamicMethod 中调用 DynamicMethod
在创建 DynamicMethod 时如何发出 IL 来调用 DynamicMethod?
调用ILGenerator.Emit(OpCodes.Callvirt, myDynamicMethod);
IL 时会在执行时产生结果MissingMethodException
。
我用这个最小的代码重现了这个问题:
c# - 是否可以在不破解的情况下强制编译 DynamicMethod ?
我正在研究 Json 序列化解决方案。
我发现在发射的代码已经运行一次(每次使用不同的数据)之后,基于发射的序列化比对反射 api 的直接操作要快得多。
显然问题是JIT。Runtime.CompilerServices.RuntimeHelpers._CompileMethod
如果您检查in的实现,则可以验证DynamicMethod.CreateDelegate
这一点,这是一个 QCall 方法。它只为 DynamicMethod 的 MethodDescriptor 生成一个 Prestub。
所以我想知道是否有办法强制编译DynamicMethod。提供的 PreJIT 功能Runtime.CompilerServices.RuntimeHelpers.PrepareMethod
根本不起作用,因为我无法直接访问 DynamicMethod 的 RuntimeMethodHandle。那么还有其他(合法的)方法可以实现这一目标吗?
提前致谢。
c# - Getting a "Common Language Runtime detected an invalid program." error when trying to map ReadUnaligned using DynamicMethod and ILGenerator
I'm trying to map the IL code for ASP.CORE method ReadUnaligned as defined here in .NET Frameword using DynamicMethod following this example.
When trying to run the code, I get the "Common Language Runtime detected an invalid program." error.
My code:
The call to the method is:
Where ReadProcessMemory is taken from kernel32.dll
Any idea what I'm doing wrong?