作者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