看板 C_Sharp 關於我們 聯絡資訊
※ [本文轉錄自 C_and_CPP 看板] 作者: llama (阿譽) 看板: C_and_CPP 標題: [問題] 請問在 managed 專案當中寫 unmagaed,卻又沒宣告 #pragema 時間: Sat Oct 13 11:38:10 2007 您好!! 我想請問一下,如果開啟一個 managed 專案(例如 WinForm) 在裡頭定義了一些 unmanaged type(例如 c++ STL...等等不是.NET SDK) 可是沒有宣告 #pragma unmanaged,這樣的話,這些資源 gc 管的到嘛? 之前在訂定類別的時候,在某個成員函式當中使用 Win32 API,以及 宣告 API 所需要的結構,結果發生以下狀況: private __gc class AppManager { public: AppManager() : childHwnd(0), childHANDLE(0) {} void runApp( String *path, PictureBox *appLoader ) { // 將 String* 轉換成寬字元的 wchar_t* const wchar_t __pin *lpApplicationName = PtrToStringChars(path); // 初始化 CreateProcess 所需要的結構 STARTUPINFO 以及 PROCESS_INFORMATION static STARTUPINFO si; static PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(STARTUPINFO) ); ZeroMemory( &pi, sizeof(PROCESS_INFORMATION) ); si.cb = sizeof(STARTUPINFO); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOWNORMAL; CreateProcess( lpApplicationName, NULL, NULL, NULL, false, 0, NULL, NULL, &si, &pi ); ... } private: Int32 childHANDLE; Int32 childHwnd ; }; // 正常運作 一旦我將上面兩行紅色的結構移動到 private 當作 field,就會發生無法將 managed type 轉換成 unmanaged type,所以就對 managed/unmanaged type 產生 疑問,甚至到底需不需要加上 #pragma unmanaged,才讓 CLR 不去管理?對於以上 範例我是好奇在區域變數 GC 是怎麼管(感覺這種它就沒在管)。 -- 感謝你/妳的熱心指導 :) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.168.185.107 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.208.101