问题标签 [intermediate-language]

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 回答
65 浏览

.net - 订阅事件时如何传值,事件触发时获取(DynamicMethod使用问题)

任务是在运行时创建事件处理程序。对于不同的事件,我需要使用不同的参数值调用一种方法。事件及其编号仅在运行时已知。所以我试图生成动态方法,每个方法都将分配给某个事件,但通常它们都只是将一些值传递给实例方法并调用它。

如果可以以更简单的方式完成类似的事情,那就太好了。我的意思是在订阅阶段传递一些值,然后在触发事件时获取它。

这就是我现在想要做的:

0 投票
2 回答
373 浏览

c# - WPF点击事件在特定构建环境下触发两次

我们正面临一个奇怪的问题。我们有一个用 WPF 编写的用户控件,并且我们在 xaml 文件中添加了一个单击事件处理程序。在本地系统上,它按预期工作。但是当在服务器(我们有代码存储库)上生成构建时,我们注意到生成的构建有一个错误。错误是此控件每次都会生成两次单击事件。我们在事件处理函数中使用 OpenFileDialog 来浏览图像。我们注意到通过 VS 构建的本地系统使用 CSC.exe 进行构建,而在服务器上我们使用 MSBuild.exe。所以我们也尝试在本地系统上使用 MSBuild 进行构建。但是错误不会在本地系统上重现。使用 VS 在服务器系统上构建代码也不会重现该错误。因此,重现错误的唯一方法是在服务器上生成自动构建。我们已经尝试比较两个 dll(错误和非错误)的 IL 代码。我们检查了事件处理函数的 IL 代码。IL 代码是相同的。

我不怀疑我们的代码,因为该错误在任何情况下都不会在我们的本地系统上重现。如果您需要更多输入/详细信息,请告诉我。

任何帮助将不胜感激。

谢谢,米沙尔

0 投票
3 回答
387 浏览

compiler-construction - 说中间代码在虚拟机中运行是否具有误导性

如果我理解我所读的内容是正确的,那么虚拟机本质上就是中间代码的编译器。但从来没有说过 Delphi(作为非托管代码的一个例子)在其编译器中运行。将虚拟机描述为编译器会不会更容易混淆?

0 投票
1 回答
145 浏览

.net - 在 .NET 中,如何限制对私有方法的访问?

在 .NET 中,私有方法和属性是由运行时执行还是仅由编译器执行?

如果你试图调用另一个对象的私有方法,编译器会抛出一个访问异常。如果您手动操作 IL 或尝试通过反射调用会怎样——您能做到吗?此外,它是否因运行时版本(1.1 与 2.0 与 3.5 与 4.0)而异?

0 投票
3 回答
502 浏览

.net - 从程序集中提取特定 IL(.NET 中间语言)签名的机制

我在 Microsoft .NET 程序集 mscorlib.dll 中找到了大约 25 种类型的列表,我需要在其中提取类及其成员的 IL 签名。我想要每种类型一个文件,每个签名在一行上。因此,例如,采用类型

我想从该类型的程序集中提取以下内容(有一些我不需要的私有成员,但如果需要我可以手动处理)。

所以,我想了四种方法来实现这一点:

  • 手动将每种类型的每个签名手动剪切并粘贴到 ildasm 的文本文件中(直接或通过 mscorlib.dll 的转储)。有些类型很长,所以这可能会变得乏味。如果我需要做更多,这绝对不是一个好的长期解决方案。

  • 编写一个使用反射的工具来尝试获取所有签名。我在高层次上考虑过使用下面的伪代码 [1] 之类的东西。

  • 编写一个工具,在 ildasm 的 IL 转储上使用字符串解析来查找类型并获取签名

  • 使用现有的工具来完成任务。

有谁知道可以帮助我完成任务的现有工具或机制?如果没有,关于制作这样一个工具的方向有什么建议吗?如果您对如何完成它有任何代码想法,我将不胜感激。

[1]

0 投票
4 回答
3270 浏览

c# - IL 中的 if 是什么样的?

语句在编译成 IL 时是什么if样子的?

这是 C# 中一个非常简单的构造。有人能给我一个更抽象的定义吗?

0 投票
5 回答
687 浏览

c# - 以编程方式比较两种方法的 IL

我有一个已编译的程序集。我想以编程方式将该程序集中其中一种方法的方法实现与我期望的方法进行比较。

有没有办法可以比较他们的 IL?即使我可以得到任何指令集的字节数组表示,我也会在一个好地方。

帮助表示赞赏。

0 投票
2 回答
652 浏览

c# - C# DLL 到 .il,到 C++ DLL:字符串问题

我正在尝试从 C# 导出一些功能,以便可以在我的非托管 C++ 应用程序中使用它。在我的测试项目中,我首先创建了一个 C# DLL,其中包含一个将字符串写入文件的简单函数。然后我使用 ildasm 将其转换为中间语言(.il 文件)。.il 中的函数如下所示:

我在那里看到关键字“ansi”......使用 ilasm.exe 将其转换为 C++ DLL 后,我尝试加载以在我的 C++ 应用程序中使用此函数:

但这只会将第一个字母(“h”)写入文件。如果我在 C++ 中将函数声明为使用 char 而不是 wchar_t,并使用“hello all”而不是 L“hello all”,则整个字符串将写入文件。

更多注意事项: ildasm 选项: /nologo /quiet /out:MyTest.dll MyTest.il /unicode /DLL /resource=MyTest.res /optimize

ilasm 选项:/nologo /out:C:\temp\CpCsh.dll "MyTest.il" /DLL

任何帮助表示赞赏!

0 投票
1 回答
2867 浏览

compilation - 三地址码 (TAC / 3AC)

在阅读时,我遇到了“中级语言”和“3AC”这两个术语。

据我了解,IL 是源代码编译过程中的中间“步骤”。更具体地说,我正在阅读有关字节码(Java)和 C 的内容。

我解释它的方式(如果错了请纠正我)是;

源代码 1(例如 Lisp)-> 中间语言(C)-> 汇编语言-> 机器代码

源代码 2(例如 Java)-> 字节码-> Java 虚拟机

因此,基于此,我正在努力了解三地址代码(TAC/3AC)在哪里发挥作用,以及它的用途。

0 投票
1 回答
1153 浏览

.net - 即时修改 IL 代码

我想即时修改现有类的 .Net IL 代码。这有可能吗?我发现了一些对 .Net Profiling API 的引用,但根据文档,它不支持自我修改应用程序。主要目的是替换某些属性的 getter 和 setter。任何提示将不胜感激。

干杯,阿奇姆