Visual C++中删除托管对象、包装库及其他
2008-11-12 19:26:24 来源:WEB开发网但如何将托管 String 再次转换为本机 TCHAR*?
Matthew Brady
答:一旦您了解了神奇的 voodoo,这会变得很简单。您必须调用 PtrToStringChars 并 pin 结果。代码如下所示:
以下是引用片段:
String __gc* s = S"Hello";
const wchar_t __pin* p = PtrToStringChars(s);
不要忘记对从 PtrToStringChars 返回的指针进行 __pin 操作。Pin 是必须的,因为 PtrToStringChars 将一个托管 (__gc) 指针返回给托管内存中的 String 对象的第一个字符,而垃圾回收器随时都会回收托管内存,除非您显式对它进行 __pin.一般情况下,每次将 __gc 指针传递给本机(非托管)函数时都必须使用 __pin.
图 4 显示了一个小程序,它将托管 String 转换成宽字符和 ANSI 字符串。要转换成 ANSI,可以使用自己喜欢的转换函数,如 wcstombs 或 ATL W2A 宏。如果您使用 MFC Cstrings,则不必进行任何操作,因为 CString 对 char* 和 wchar_t 都有赋值运算符:
以下是引用片段:
// both will work CString s1 = "hello, world";
CString s2 = L"Hello, world";
问:在我的应用程序中,我想将选项卡控件的背景颜色从 gray 转换成 white.我试图从 CTabCtrl 派生一个类并使用所有的功能,但没有成功。能告诉我怎么办吗?
Mayur Patel
答:更改选项卡控件中选项卡的颜色十分简单,但要将属性表的颜色翻新则需要大量的工作,不下很大决心是做不到的。对于选项卡,基本思想是使控件成为所有者描述的控件,然后处理 WM_DRAWITEM.如果您使用 MFC,则可以重写虚函数 DrawItem.
- ››删除Win8自带中文输入法方法
- ››Visual Basic 2008 数学函数
- ››Visual Studio2005中Smart Device的问题
- ››Visual Studio 中根据数据库字段动态生成控件
- ››Visual Studio 11全新黑色主题
- ››Visual Studio 2011 Beta新特性(一):安装VS201...
- ››删除TXT中内容重复的行只保留唯一值
- ››删除*.py文件中的注释
- ››删除Word2010文档最近的位置记录
- ››删除win7资源管理器碍眼图标小技巧
- ››删除vista系统NIFS分区文件的方法
- ››删除Linux后 找回Windows启动菜单
更多精彩
赞助商链接