传递结构体变量解决方案,资料整理一
2019獨角獸企業重金招聘Python工程師標準>>>
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
總結
以上是生活随笔為你收集整理的传递结构体变量解决方案,资料整理一的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASCX呼叫ASPX.CS的方法
- 下一篇: js 正则学习小记之匹配字符串