※ [本文轉錄自 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