C_Sharp 板


LINE

没用过MC++的old syntax, 不过用C++/CLI有一段时间了, 应该是差不多 ※ 引述《llama (阿誉)》之铭言: : ※ [本文转录自 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 管的到嘛? GC只负责managed memory, 所以答案是: 管不到 : 之前在订定类别的时候,在某个成员函式当中使用 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 是怎麽管(感觉这种它就没在管)。 managed class的member只允许managed types, 所以你的宣告应该是pointer: private: static STARTUPINFO* si; ... 宣告成这种interior pointer, 才能於managed class混合unmanaged types 然而interior pointer和一般pointer是不一样的, 所以你的转换才会失败. 相信compiler已经警告过你了 正确的作法应该是要用之前先将此pointer定(pin)住, C++/CLI是这样: pin_ptr<STARTINFO*> p = &si; MC++不知道, 不过我看到你的code有__pin的关键字, 应该作法类似 至於你的问题, 答案是: 既然GC没办法管到unmanaged resources, 它当然不会去管, 它也不允许我们把责任推给它(所以只能用interior pointer) local variables 当然也不会被GC管, 还是老话一句:GC只负责managed memory. 所以你的感觉没错:) --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.229.152.241
1F:推 llama:感谢你热情的指导 :) 10/17 10:36







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP