作者llama (阿誉)
看板C_Sharp
标题[问题] 请问在 managed 专案当中写 unmagaed, …
时间Sun Oct 14 12:10:23 2007
※ [本文转录自 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