0

我想知道 C++/CLI 编译器是如何工作的,我在 C++/CLI 中生成了一个简单代码的 5 个树转储

我用这个简单的代码(纯粹、安全的 CLR)生成了 3 个树转储:

using namespace System;

int main(array<System::String ^> ^args)
{
    Console::WriteLine(L"Hello World");
    return 0;
}

所以,但是,当我用'printf'编译代码时......CLR和PURE的代码生成使用这个指令:

   |___[STM] printf : vararg int32 modopt([mscorlib]System.Runtime.CompilerServices.CallConvCdecl)(int8 modopt([mscorlib]System.Runtime.CompilerServices.IsSignUnspecifiedByte) modopt([mscorlib]System.Runtime.CompilerServices.IsConst)*)

IL代码是这样的:

//000008:   printf("Ola mundo\n");
  IL_000a:  /* 7F   | (04)000001       */ ldsflda    valuetype '<CppImplementationDetails>'.$ArrayType$$$BY0L@$$CBD/*02000002*/ modopt([mscorlib/*23000001*/]System.Runtime.CompilerServices.IsConst/*01000002*/) '?A0x1af50272.unnamed-global-0' /* 04000001 */
  IL_000f:  /* 28   | (0A)000004       */ call       vararg int32 modopt([mscorlib/*23000001*/]System.Runtime.CompilerServices.CallConvCdecl/*01000001*/) printf(int8 modopt([mscorlib/*23000001*/]System.Runtime.CompilerServices.IsSignUnspecifiedByte/*01000006*/) modopt([mscorlib/*23000001*/]System.Runtime.CompilerServices.IsConst/*01000002*/)*) /* 0A000004 */
  IL_0014:  /* 26   |                  */ pop

所以,在我尝试开发这种风格的编译器时,我发现了一个名为 pnetC 的 NetGnu 编译器,这个编译器混合了 C Native 代码和 MSIL,但是,编译器使用一个包含所有 .h 文件的 dll ......

所以,我想要这种编译器风格的技术信息,我如何生成这种混合代码?

所以,基本上,我需要这方面的想法,以及这方面的技术信息......

谢谢亚历山大

4

0 回答 0