传递结构体变量解决方案,资料整理一
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
1.activex控件返回BSTR* 的方法
用到了
COleDataObject::GetData
BOOL GetData( CLIPFORMAT cfFormat, LPSTGMEDIUM lpStgMedium, LPFORMATETC lpFormatEtc = NULL );
其中第一個參數(shù)為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 ?
方便在應(yīng)用程序間或者在應(yīng)用程序內(nèi)部傳遞參數(shù)
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數(shù)據(jù)轉(zhuǎn)換成CHAR字符數(shù)組
論壇鏈接:http://blog.csdn.net/wbczyh/article/details/2137511
在C++中如何將ActiveX控件所使用的BSTR數(shù)據(jù)轉(zhuǎn)換成CHAR字符數(shù)組?
?
BSTR類型是COM中使用的標準字符串類型。它其實是一個32位指針,保存字符串首字符的地址。
???????在C++中使用ActiveX控件編程時經(jīng)常會遇到聲明為VARIANT* 類型但實際是BSTR數(shù)據(jù)的參數(shù),如在使用WebBrowser2瀏覽器控件時候:
BeforeNavigate2Explorer1(LPDISPATCH pDisp, VARIANT* URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers, BOOL* Cancel)
上面這個事件函數(shù)的第二個參數(shù)URL就是個BSTR類型的數(shù)據(jù),但聲明為VARIANT*。怎樣將它轉(zhuǎn)化char*類型的數(shù)據(jù)呢?方法如下:
?
#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類型的數(shù)據(jù),以VARIANT數(shù)據(jù)作為構(gòu)造函數(shù)的參數(shù)
char* sURL=bstrURL;//通過自動類型轉(zhuǎn)換實現(xiàn)BSTR->char*的轉(zhuǎn)換
…
}
?
基本方法就是:先新建一BSTR類型的數(shù)據(jù),通過在構(gòu)造函數(shù)中傳入VARIANT*類型的數(shù)據(jù)來將COM中的數(shù)據(jù)拷貝到新建數(shù)據(jù)中;然后通過BSTR到char*的自動類型轉(zhuǎn)換實現(xiàn)BSTRàchar*的轉(zhuǎn)換。
?
值得注意的是進行這些轉(zhuǎn)換操作得有個前提條件:那就是引用COM相應(yīng)的頭文件及庫,參見上面的代碼。
?
其實在上面的庫中有一對BSTR與char*之間互轉(zhuǎn)的函數(shù):
char* ?_com_util::ConvertBSTRToString(BSTR pSrc);
BSTR??? ?_com_util::ConvertStringToBSTR(const?char* pSrc);
第一個函數(shù)將BSTR轉(zhuǎn)換成char*,第二個函數(shù)作相反的轉(zhuǎn)換,使用方法都很簡單,就不用贅述了!
轉(zhuǎn)載于:https://my.oschina.net/u/1469992/blog/275063
總結(jié)
以上是生活随笔為你收集整理的传递结构体变量解决方案,资料整理一的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASCX呼叫ASPX.CS的方法
- 下一篇: js 正则学习小记之匹配字符串