传递结构体变量解决方案,资料整理一

  • 1.activex控件返回BSTR* 的方法

用到了

COleDataObject::GetData

BOOL GetData( CLIPFORMAT cfFormat, LPSTGMEDIUM lpStgMedium, LPFORMATETC lpFormatEtc = NULL );

其中第一个参数为ClipboardFormat

然后查找

The RegisterClipboardFormat function registers a new clipboard format. This format can then be used as a valid clipboard format.

UINT RegisterClipboardFormat(
  LPCTSTR lpszFormat   // address of name string);

然后查找

Clipboard  

方便在应用程序间或者在应用程序内部传递参数

The clipboard is a set of functions and messages that enable Win32-based applications to transfer data. Because all applications have access to the clipboard, data can be easily transferred between applications or within an application.

This overview does not describe how to copy and paste linked or embedded objects. For information on these subjects, see the COM documentation. 

2.在C++中如何将ActiveX控件所使用的BSTR数据转换成CHAR字符数组

论坛链接:http://blog.csdn.net/wbczyh/article/details/2137511

C++中如何将ActiveX控件所使用的BSTR数据转换成CHAR字符数组?

 

BSTR类型是COM中使用的标准字符串类型。它其实是一个32位指针,保存字符串首字符的地址。

       在C++中使用ActiveX控件编程时经常会遇到声明为VARIANT* 类型但实际是BSTR数据的参数,如在使用WebBrowser2浏览器控件时候:

BeforeNavigate2Explorer1(LPDISPATCH pDisp, VARIANT* URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers, BOOL* Cancel)

上面这个事件函数的第二个参数URL就是个BSTR类型的数据,但声明为VARIANT*。怎样将它转化char*类型的数据呢?方法如下:

 

#include "comutil.h"

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

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

 

BeforeNavigate2Explorer1(LPDISPATCH pDisp, VARIANT* URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers, BOOL* Cancel)

{

_bstr_t bstrURL(URL);//新建一BSTR类型的数据,以VARIANT数据作为构造函数的参数

char* sURL=bstrURL;//通过自动类型转换实现BSTR->char*的转换

}

 

基本方法就是:先新建一BSTR类型的数据,通过在构造函数中传入VARIANT*类型的数据来将COM中的数据拷贝到新建数据中;然后通过BSTR到char*的自动类型转换实现BSTRàchar*的转换。

 

值得注意的是进行这些转换操作得有个前提条件:那就是引用COM相应的头文件及库,参见上面的代码。

 

其实在上面的库中有一对BSTR与char*之间互转的函数:

char*  _com_util::ConvertBSTRToString(BSTR pSrc);

BSTR     _com_util::ConvertStringToBSTR(const char* pSrc);

第一个函数将BSTR转换成char*,第二个函数作相反的转换,使用方法都很简单,就不用赘述了!


转载于:https://my.oschina.net/u/1469992/blog/275063

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值