![](https://csdnimg.cn/release/download_crawler_static/4050370/bg6.jpg)
然后使用 SUCCEEDED 宏检查 hr 的值以确定 QueryInterface() 的调用情况 , 如果成功的
话你就可以象使用其它接口指针那样使用新的接口指针, pIPF 。但必须记住调 用
pIPF->Release() 通知 COM 对象已经用完这个接口。
仔细做好串处理
这一部分将花点时间来讨论如何在 COM 代码中处理串 。 如果你熟悉 Unicode 和 ANSI
,
并知道如何对它们进行转换的话 , 你就可以跳过这一部分 , 否则还是读一下这一部分的内容
。
不管什么时候 , 只要 COM 方法返回一个串 , 这个串都是 Unicode 串 ( 这里指的是写 入
COM 规范的所有方法 ) 。 Unicode 是一种字符编码集,类似 ASCII ,但用两个字节表示一个
字符。如果你想更好地控制或操作串的话,应该将它转换成 TCHAR 类型串。 TCHAR 和以
_t 开头的函数(如 _tcscpy() )被设计用来让你用相同的源代码处理 Unicode 和 ANSI 串。在
大多数情况下编写的代码都是用来处理 ANSI 串和 ANSI WindowsAPIs ,所以在下文中,除
非另外说明,我所说的字符 / 串都是指 TCHAR 类型。你应该熟练掌握 TCHAR 类型,尤其
是当你阅读其他人写的有关代码时,要特别注意 TCHAR 类型。
当你从某个 COM 方法返回得到一个 Unicode 串时 , 可以用下列几种方法之一将它转换
成 char 类型串:
1 、调用 WideCharToMultiByte() API 。
2 、调用 CRT 函数 wcstombs() 。
3 、使用 CString 构造器或赋值操作 ( 仅用于 MFC ) 。
4 、使用 ATL 串转换宏。
WideCharToMultiByte()
WideCharToMultiByte()
WideCharToMultiByte()
WideCharToMultiByte()
你可以用 WideCharToMultiByte() 将一个 Unicode 串转换成一个 ANSI 串 。 此函数的原型
如下:
int
WideCharToMultiByte ( UINT CodePage,
DWORD dwFlags,
LPCWSTR lpWideCharStr,
int
cchWideChar,
LPSTR lpMultiByteStr,
int
cbMultiByte,
LPCSTR lpDefaultChar,
LPBOOL lpUsedDefaultChar );
以下是参数解释:
CodePage
Unicode 字符转换成的代码页 。 你可以传递 CP_ACP 来使用当前的 ANSI 代码页 。 代码页是
256 个字符集。字符 0 —— 127 与 ANSI 编码一样。字符 128 —— 255 与 ANSI 字符不同,它可
以包含图形字符或者读音符号 。 每一种语言或地区都有其自己的代码页 , 所以使用正确的代
码页对于正确地显示重音字符很重要。