VARIANT*如何转换为LPCTSTR?

linamu 2007-02-28 11:43:01
浏览器编程时有以下函数:
BeforeNavigate2Explorer1(LPDISPATCH pDisp, VARIANT* URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers, BOOL* Cancel);
如何将 VARIANT* URL 转换为 LPCTSTR strURL?


...全文
432 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lineuser 2008-04-17
  • 打赏
  • 举报
回复
mark 一下下
crumpy 2007-02-28
  • 打赏
  • 举报
回复
// Variant2TSTR.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stdio.h"
#include "wchar.h"
#include "tchar.h"
#include "windows.h"

#pragma comment(lib, "oleaut32.lib")

int _tmain(int argc, _TCHAR* argv[])
{
VARIANT var;

::VariantInit( &var );
var.bstrVal = ::SysAllocString( OLESTR("Hello 中文") );
var.vt = VT_BSTR;

TCHAR szText[MAX_PATH];

#if defined _UNICODE || defined UNICODE
lstrcpy(szText, var.bstrVal);
#else
WideCharToMultiByte(CP_ACP, 0, var.bstrVal, -1, szText, sizeof(szText), NULL, NULL);
#endif

_tprintf( TEXT("TSTR = %s\n"), szText);

::VariantClear( &var );

return 0;
}

crumpy 2007-02-28
  • 打赏
  • 举报
回复
1. 如果字符串保存在VARIANT中BSTR域中, 先将BSTR从VARIANT提取出来

2. 然后暂时将BSTR看作OLESTR或者WCHAR串 pwsz = (LPOLESTR)( var... );

3. 如果你用的是ATL或MFC, 包含afxpriv.h, 然后在程序中写:
USES_CONVERSION
LPTSTR psz = OLE2T( pwsz );

4. 用完后, 用SysFreeString释放VARIANT中的BSTR.

如果你不是用MFC/ATL, 那需要WideCharToMultiChar()这个API, 还要判断LPTSTR是CHAR*还是WCHAR*

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧