Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ cli 纯C+的MSIL+/CLI_C++ Cli_Cil - Fatal编程技术网

C++ cli 纯C+的MSIL+/CLI

C++ cli 纯C+的MSIL+/CLI,c++-cli,cil,C++ Cli,Cil,/clr:pure开关生成纯MSIL,但不可验证。本机数组和指针可在此模式下使用。这是否意味着MSIL中有一个保存本机数组和指针的结构?如果是,我想问如何对MSIL本机数组和指针进行编码?是的,CIL中有一个表示非托管指针的类型。它们类似于托管指针(C#中的ref和out,CIL中的&),只是GC忽略它们,您可以对它们执行一些算术运算(那些对指针有意义的运算) 有趣的是,指针类型确实包含有关目标类型的信息(例如,int32*),但所有算术运算都是基于字节的 例如,以下C++/CLI方法: voi

/clr:pure
开关生成纯MSIL,但不可验证。本机数组和指针可在此模式下使用。这是否意味着MSIL中有一个保存本机数组和指针的结构?如果是,我想问如何对MSIL本机数组和指针进行编码?

是的,CIL中有一个表示非托管指针的类型。它们类似于托管指针(C#中的
ref
out
,CIL中的
&
),只是GC忽略它们,您可以对它们执行一些算术运算(那些对指针有意义的运算)

有趣的是,指针类型确实包含有关目标类型的信息(例如,
int32*
),但所有算术运算都是基于字节的

例如,以下C++/CLI方法:

void条(int*a)
{
a[5]=15;
}
ref类
内时产生以下CIL(如反射器所报告):

.method私有隐藏实例无效条(int32*a)cil管理
{
.maxstack 2
L_0000:ldarg.1//加载指向堆栈的指针的值
L_0001:ldc.i4.s 20//将数字20(=4*5)加载到堆栈中
L_0003:添加//将20添加到指针
L_0004:ldc.i4.s 15//将数字15加载到堆栈中
L_0006:stind.i4//将15的值存储在计算地址
L_0007:ret//从方法返回
}

< /代码>可以用来对生成的程序集进行反编译。只需在C或C++中编写代码,就不需要特殊的东西。任何符合标准的C89或C++03代码都可以转换为MSIL。看看ildasm。exe@ildjarn,我对
语言一无所知,谢谢你这样教我。