WEB开发网
开发学院软件开发VC Visual C++中删除托管对象、包装库及其他 阅读

Visual C++中删除托管对象、包装库及其他

 2008-11-12 19:26:24 来源:WEB开发网   
核心提示: 但如何将托管 String 再次转换为本机 TCHAR*?Matthew Brady答:一旦您了解了神奇的 voodoo,这会变得很简单,Visual C++中删除托管对象、包装库及其他(6),您必须调用 PtrToStringChars 并 pin 结果,代码如下所示: 以下是引用片段:

但如何将托管 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.

上一页  1 2 3 4 5 6 7 8  下一页

Tags:Visual 删除 托管

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接