文档章节

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

小青_1989
 小青_1989
发布于 2014/06/06 14:04
字数 611
阅读 27
收藏 0
  • 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*,第二个函数作相反的转换,使用方法都很简单,就不用赘述了!


© 著作权归作者所有

共有 人打赏支持
小青_1989
粉丝 3
博文 75
码字总数 12913
作品 0
大连
程序员
完成端口中的单句柄数据结构与单IO数据结构的理解与设计

完成端口中的单句柄数据结构与单IO数据结构的理解与设计   完成端口模型,针对于WIN平台的其它异步网络模型而言,最大的好处,除了性能方面的卓越外,还在于完成端口在传递网络事件的通知时...

IMGTN
2012/11/28
0
0
【Nebula系列】通过UNIX域套接字传递描述符的应用

  传送文件描述符是高并发网络服务编程的一种常见实现方式。Nebula 高性能通用网络框架即采用了UNIX域套接字传递文件描述符设计和实现。本文详细说明一下传送文件描述符的应用。 1. TCP服务...

铁芒箕
07/18
0
0
Go 函数式选项模式

本文译自 Functional Options Pattern in Go 版权@归原文所有. Golang 开发者遇到的许多问题之一是尝试将一个函数的参数设置为可选. 这是一个非常常见的用例, 有些对象应该使用一些基本的默认...

A Coder @ Work
02/01
0
0
浅析Python中的struct模块

最近在学习python网络编程这一块,在写简单的socket通信代码时,遇到了struct这个模块的使用,当时不太清楚这到底有和作用,后来查阅了相关资料大概了解了,在这里做一下简单的总结。 了解c...

疯子张
2014/10/29
0
0
深入理解C语言结构体成员变量内存分配

欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列博客。 1 问题描述 在学习C语言的时候,我们都会频繁的接触到结构体,使用结...

算法与编程之美
04/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

你为什么在Redis里读到了本应过期的数据

一个事故的故事 晚上睡的正香突然被电话吵醒,对面是开发焦急的声音:我们的程序在访问redis的时候读到了本应过期的key导致整个业务逻辑出了问题,需要马上解决。 看到这里你可能会想:这是不...

IT--小哥
今天
2
0
祝大家节日快乐,阖家幸福! centos GnuTLS 漏洞

yum update -y gnutls 修复了GnuTLS 漏洞。更新到最新 gnutls.x86_64 0:2.12.23-22.el6 版本

yizhichao
昨天
5
0
Scrapy 1.5.0之选择器

构造选择器 Scrapy选择器是通过文本(Text)或 TextResponse 对象构造的 Selector 类的实例。 它根据输入类型自动选择最佳的解析规则(XML vs HTML): >>> from scrapy.selector import Sele...

Eappo_Geng
昨天
4
0
Windows下Git多账号配置,同一电脑多个ssh-key的管理

Windows下Git多账号配置,同一电脑多个ssh-key的管理   这一篇文章是对上一篇文章《Git-TortoiseGit完整配置流程》的拓展,所以需要对上一篇文章有所了解,当然直接往下看也可以,其中也有...

morpheusWB
昨天
5
0
中秋快乐!!!

HiBlock
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部