作者Action (雪...)
看板C_Sharp
标题Re: C#的视窗程式设计
时间Tue Nov 12 00:23:20 2002
※ 引述《freaky (jon)》之铭言:
: C++ 当然可以直接创造 COM 物件, 也可以直接呼叫 APIs.
: 如果还要透过 BCL, MC++ 就不叫 "唯一" 可以混用 managed 和
: unmanaged code 的 .NET 语言. 只有当 unmanaged code 要储存 managed 物件
: 的时候, 才需要藉由 System.Runtime.InteropServices 里的 GCHandle 完成.
将刚刚你的那个程式, 用 ildasm 来看:
.method public static int32 modopt([mscorlib]System.Runtime.CompilerServices.CallConvCdecl)
main() cil managed
{
.vtentry 1 : 1
// Code size 35 (0x23)
.maxstack 1
.locals (valuetype NoGCclass* V_0,
class GCclass V_1)
IL_0000: ldnull
IL_0001: stloc.1
IL_0002: ldc.i4.1
IL_0003: call void* modopt([mscorlib]System.Runtime.CompilerServices.CallConvCdecl) new(unsigned int32)
IL_0008: stloc.0
IL_0009: ldloc.0
IL_000a: call void modopt([mscorlib]System.Runtime.CompilerServices.CallConvThiscall) NoGCclass.Hello(valuetype NoGCclass* modopt([Microsoft.VisualC]Microsoft.VisualC.IsConstModifier) modopt([Microsoft.VisualC]Microsoft.VisualC.IsConstModifier))
IL_000f: ldloc.0
IL_0010: call void modopt([mscorlib]System.Runtime.CompilerServices.CallConvCdecl) delete(void*)
IL_0015: newobj instance void GCclass::.ctor()
IL_001a: stloc.1
IL_001b: ldloc.1
IL_001c: call instance void GCclass::Hello()
IL_0021: ldc.i4.0
IL_0022: ret
} // end of method 'Global Functions'::main
由此可知:
1. main 是 managed
2. 其中的 unmanaged 是透过 CompilerServices.
: : 我不否认目前 C# compiler 并没有产生 native code 的能力,
: : 不然早就可以直接执行了, 也不需要装什麽的...
: C# 设计上本来就是要在 CLR 环境下执行的.
要是单只是不要 gc 的话, C# 只要加个 unsafe 就行了...
--
※ 发信站: 批踢踢实业坊(ptt.csie.ntu.edu.tw)
◆ From: 218.184.81.80