COM编程入门,十分浅显易懂
有个宏是OLE2CA()(Unicode到常量char串),可以被用到上面的例子中,OLE2CA()实际上是个更正宏,因为lstrcpy()的第二个参数是一个常量char*,关于这个问题本文将在以后作详细讨论。
另一方面,如果你不想做以上复杂的串处理,尽管让它还保持为Unicode串,如果编写的是控制台应用程序,输出/显示Unicode串时应该用全程变量std::wcout,如:
wcout<< wszSomeString;
但是要记住,std::wcout只认Unicode,所以你要是“正常”串的话,还得用std::cout输出/显示。对于Unicode串文字量,要使用前缀L标示,如: wcout<< L"The Oracle says..." << endl << wszOracleResponse;
如果保持串为Unicode,编程时有两个限制:
必须使用wcsXXX() Unicode串处理函数,如wcslen();
在Windows 9x环境中不能在Windows API中传递Unicode串。要想编写能在9x和NT上都能运行的应用,必须使用TCHAR类型,详情请参 考MSDN; 用例子代码总结上述内容
下面用两个例子演示本文所讲的COM概念。代码中还包含了本文的例子工程。 使用单接口COM对象
第一个例子展示的是单接口COM对象。这可能是你碰到得最简单的例子。它使用外壳中的活动桌面组件对象类(CLSID_ActiveDesktop)来获得当前桌面墙纸的文件名。请确认系统中安装了活动桌面(Active Desktop)。 以下是编程步骤:
初始化COM库。 (Initialize); 创建一个与活动桌面交互的COM对象,并取得IActiveDesktop接口; 调用COM对象的GetWallpaper()方法; 如果GetWallpaper()成功,则输出/显示墙纸文件名; 释放接口(Release()); 收回COM库(Uninitialize);
WCHAR wszWallpaper [MAX_PATH];
CString strPath;
HRESULT hr;
IActiveDesktop* pIAD;
// 1. 初始化COM库(让Windows加载DLLs)。通常是在程序的InitInstance()中调用
// CoInitialize ( NULL )或其它启动代码。MFC程序使用AfxOleInit()。
CoInitialize ( NULL );