我想知道 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 ......
所以,我想要这种编译器风格的技术信息,我如何生成这种混合代码?
所以,基本上,我需要这方面的想法,以及这方面的技术信息......
谢谢亚历山大