看板 C_Sharp 關於我們 聯絡資訊
※ 引述《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