傳遞結構體變量解決方案,資料整理一

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

用到了編程

COleDataObject::GetData

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

其中第一個參數爲ClipboardFormat瀏覽器

而後查找app

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);

而後查找
spa

Clipboard  

方便在應用程序間或者在應用程序內部傳遞參數.net

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. code

2.在C++中如何將ActiveX控件所使用的BSTR數據轉換成CHAR字符數組

論壇連接:http://blog.csdn.net/wbczyh/article/details/2137511orm

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*,第二個函數做相反的轉換,使用方法都很簡單,就不用贅述了!

相關文章
相關標籤/搜索