传递结构体变量解决方案,资料整理一
传递结构体变量解决方案,资料整理一
小青_1989 发表于4年前
传递结构体变量解决方案,资料整理一
  • 发表于 4年前
  • 阅读 25
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

  • 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*,第二个函数作相反的转换,使用方法都很简单,就不用赘述了!


共有 人打赏支持
粉丝 4
博文 44
码字总数 12913
×
小青_1989
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: