问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

_bstr_t和_variant_t是怎样定义的

发布网友 发布时间:2022-05-06 07:03

我来回答

3个回答

热心网友 时间:2022-06-28 23:36

_bstr_t的定义:COMUTIL.H
class _bstr_t {
public:
// Constructors
//
_bstr_t() throw();
_bstr_t(const _bstr_t& s) throw();
_bstr_t(const char* s) throw(_com_error);
_bstr_t(const wchar_t* s) throw(_com_error);
_bstr_t(const _variant_t& var) throw(_com_error);
_bstr_t(BSTR bstr, bool fCopy) throw(_com_error);

// Destructor
//
~_bstr_t() throw();

// Assignment operators
//
_bstr_t& operator=(const _bstr_t& s) throw();
_bstr_t& operator=(const char* s) throw(_com_error);
_bstr_t& operator=(const wchar_t* s) throw(_com_error);
_bstr_t& operator=(const _variant_t& var) throw(_com_error);

// Operators
//
_bstr_t& operator+=(const _bstr_t& s) throw(_com_error);
_bstr_t operator+(const _bstr_t& s) const throw(_com_error);

// Friend operators
//
friend _bstr_t operator+(const char* s1, const _bstr_t& s2) throw(_com_error);
friend _bstr_t operator+(const wchar_t* s1, const _bstr_t& s2) throw(_com_error);

// Extractors
//
operator const wchar_t*() const throw();
operator wchar_t*() const throw();
operator const char*() const throw(_com_error);
operator char*() const throw(_com_error);

// Comparison operators
//
bool operator!() const throw();
bool operator==(const _bstr_t& str) const throw();
bool operator!=(const _bstr_t& str) const throw();
bool operator<(const _bstr_t& str) const throw();
bool operator>(const _bstr_t& str) const throw();
bool operator<=(const _bstr_t& str) const throw();
bool operator>=(const _bstr_t& str) const throw();

// Low-level helper functions
//
BSTR copy() const throw(_com_error);
unsigned int length() const throw();

// Binary string assign
//
void Assign(BSTR s) throw(_com_error);

private:
// Referenced counted wrapper
//
class Data_t {
public:
// Constructors
//
Data_t(const char* s) throw(_com_error);
Data_t(const wchar_t* s) throw(_com_error);
Data_t(BSTR bstr, bool fCopy) throw(_com_error);
Data_t(const _bstr_t& s1, const _bstr_t& s2) throw(_com_error);

// Reference counting routines
//
unsigned long AddRef() throw();
unsigned long Release() throw();

// Extractors
//
operator const wchar_t*() const throw();
operator const char*() const throw(_com_error);

// Low-level helper functions
//
const wchar_t* GetWString() const throw();
const char* GetString() const throw(_com_error);

BSTR Copy() const throw(_com_error);
void Assign(BSTR s) throw(_com_error);
unsigned int Length() const throw();
int Compare(const Data_t& str) const throw();

private:
wchar_t* m_wstr;
mutable char* m_str;
unsigned long m_RefCount;

// Never allow default construction
//
Data_t() throw();

// Never allow copy
//
Data_t(const Data_t& s) throw();

// Prevent deletes from outside. Release() must be used.
//
~Data_t() throw();

void _Free() throw();
};

private:
// Reference counted representation
//
Data_t* m_Data;

private:
// Low-level utilities
//
void _AddRef() throw();
void _Free() throw();
int _Compare(const _bstr_t& str) const throw();
};

_variant_t的定义:COMUTIL.H
class _variant_t : public ::tagVARIANT {
public:
// Constructors
//
_variant_t() throw();

_variant_t(const VARIANT& varSrc) throw(_com_error);
_variant_t(const VARIANT* pSrc) throw(_com_error);
_variant_t(const _variant_t& varSrc) throw(_com_error);

_variant_t(VARIANT& varSrc, bool fCopy) throw(_com_error); // Attach VARIANT if !fCopy

_variant_t(short sSrc, VARTYPE vtSrc = VT_I2) throw(_com_error); // Creates a VT_I2, or a VT_BOOL
_variant_t(long lSrc, VARTYPE vtSrc = VT_I4) throw(_com_error); // Creates a VT_I4, a VT_ERROR, or a VT_BOOL
_variant_t(float fltSrc) throw(); // Creates a VT_R4
_variant_t(double dblSrc, VARTYPE vtSrc = VT_R8) throw(_com_error); // Creates a VT_R8, or a VT_DATE
_variant_t(const CY& cySrc) throw(); // Creates a VT_CY
_variant_t(const _bstr_t& bstrSrc) throw(_com_error); // Creates a VT_BSTR
_variant_t(const wchar_t *pSrc) throw(_com_error); // Creates a VT_BSTR
_variant_t(const char* pSrc) throw(_com_error); // Creates a VT_BSTR
_variant_t(IDispatch* pSrc, bool fAddRef = true) throw(); // Creates a VT_DISPATCH
_variant_t(bool bSrc) throw(); // Creates a VT_BOOL
_variant_t(IUnknown* pSrc, bool fAddRef = true) throw(); // Creates a VT_UNKNOWN
_variant_t(const DECIMAL& decSrc) throw(); // Creates a VT_DECIMAL
_variant_t(BYTE bSrc) throw(); // Creates a VT_UI1

// Destructor
//
~_variant_t() throw(_com_error);

// Extractors
//
operator short() const throw(_com_error); // Extracts a short from a VT_I2
operator long() const throw(_com_error); // Extracts a long from a VT_I4
operator float() const throw(_com_error); // Extracts a float from a VT_R4
operator double() const throw(_com_error); // Extracts a double from a VT_R8
operator CY() const throw(_com_error); // Extracts a CY from a VT_CY
operator _bstr_t() const throw(_com_error); // Extracts a _bstr_t from a VT_BSTR
operator IDispatch*() const throw(_com_error); // Extracts a IDispatch* from a VT_DISPATCH
operator bool() const throw(_com_error); // Extracts a bool from a VT_BOOL
operator IUnknown*() const throw(_com_error); // Extracts a IUnknown* from a VT_UNKNOWN
operator DECIMAL() const throw(_com_error); // Extracts a DECIMAL from a VT_DECIMAL
operator BYTE() const throw(_com_error); // Extracts a BTYE (unsigned char) from a VT_UI1

// Assignment operations
//
_variant_t& operator=(const VARIANT& varSrc) throw(_com_error);
_variant_t& operator=(const VARIANT* pSrc) throw(_com_error);
_variant_t& operator=(const _variant_t& varSrc) throw(_com_error);

_variant_t& operator=(short sSrc) throw(_com_error); // Assign a VT_I2, or a VT_BOOL
_variant_t& operator=(long lSrc) throw(_com_error); // Assign a VT_I4, a VT_ERROR or a VT_BOOL
_variant_t& operator=(float fltSrc) throw(_com_error); // Assign a VT_R4
_variant_t& operator=(double dblSrc) throw(_com_error); // Assign a VT_R8, or a VT_DATE
_variant_t& operator=(const CY& cySrc) throw(_com_error); // Assign a VT_CY
_variant_t& operator=(const _bstr_t& bstrSrc) throw(_com_error); // Assign a VT_BSTR
_variant_t& operator=(const wchar_t* pSrc) throw(_com_error); // Assign a VT_BSTR
_variant_t& operator=(const char* pSrc) throw(_com_error); // Assign a VT_BSTR
_variant_t& operator=(IDispatch* pSrc) throw(_com_error); // Assign a VT_DISPATCH
_variant_t& operator=(bool bSrc) throw(_com_error); // Assign a VT_BOOL
_variant_t& operator=(IUnknown* pSrc) throw(_com_error); // Assign a VT_UNKNOWN
_variant_t& operator=(const DECIMAL& decSrc) throw(_com_error); // Assign a VT_DECIMAL
_variant_t& operator=(BYTE bSrc) throw(_com_error); // Assign a VT_UI1

// Comparison operations
//
bool operator==(const VARIANT& varSrc) const throw(_com_error);
bool operator==(const VARIANT* pSrc) const throw(_com_error);

bool operator!=(const VARIANT& varSrc) const throw(_com_error);
bool operator!=(const VARIANT* pSrc) const throw(_com_error);

// Low-level operations
//
void Clear() throw(_com_error);

void Attach(VARIANT& varSrc) throw(_com_error);
VARIANT Detach() throw(_com_error);

void ChangeType(VARTYPE vartype, const _variant_t* pSrc = NULL) throw(_com_error);

void SetString(const char* pSrc) throw(_com_error); // used to set ANSI string
};

热心网友 时间:2022-06-28 23:37

_variant_t和_bstr_t这两个类分别封装并管理VARIANT和BSTR这两种数据类型,VARIANT和BSTR这两种类型是COM中使用的数据类型。为了C++中的变量应用到ADO编程中,只能进行数据类型的转换。_variant_t和_bstr_t这两个类,就可以方便的把C++类型变量转换成COM中的变量了

参考资料:http://zhidao.baidu.com/question/86443910.html?si=2

热心网友 时间:2022-06-28 23:37

在sys/types.h头文件中
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
黄山门户网主要栏目 壹家居品牌简介 湖南乐享生活家居有限公司一站式毛坯房解决方案 服务器出租 电脑上的时间日期不同步怎么办 台式电脑时间不同步怎么解决? 关于清明节的小学作文400字 微信怎么查询自己名下的微信 如何查看微信实名认证了几个账号 轿车120时速撞击力有多大? 大疆如影sc2怎么设置竖屏- 问一问 OCX中的BSTR类型,在JS中怎样获取它的值 我想加盟面食,给点意见 正在看博迪莫顿的金融学,有些困惑,求高人解答应该怎么学。 人身保险合同的变更 我想加盟牛大碗拉面 ,请问谁知道怎么加盟? 保险合同如何解除与变更的 湖南省2021年下半年是否有乡镇事业编招聘 如何在系统下查询硬盘型号 怎么把QQ空间特别关心里的人删掉... 白芨苗种植几年才能收获白芨根块? 超声波E-04是什么故障? 简单好记小名大全女孩 超声波有哪些故障? 请问!白芨苗是什么季节栽植的? 七万八的长安汽车保险应该是多少 超音波不连续发波是什么原因? 台式超声波清洗机的常见故障与解决方法? 超声波清洗机震板得故障有那些? 长安睿行M80货运版营运车保100万三责险是多少钱 介绍几本关于金融方面的的著作; C++ string如何转换为BSTR类型 牛肉面(兰州拉面)有哪些不为人知的内幕? 如果要要学一些有关金融 经济方面的课程 看些什么书比较好 如影rsc2竖拍模式怎么设置 怎样学好“金融数学”? 保险合同的效力变更包括 编程中,tchar、bstr是什么样的数据类型 金融学教材哪个好? 香八里牛肉拉面加盟店需要多少钱 求助,家里准备贴壁纸,想找一副有山、有水、有太阳的图片,做个性壁纸。 推荐点适合初学者阅读的金融类书籍,科普性质的 我去给手表换电池,他说给我换的是索尼特别好,结果两天不到,手表又不走了,我能找他去退货吗 我应该怎么学金融学,怎么看金融的书,谢谢了 浙江工商大学《金融学》,博迪、莫顿等著,曹辉等译,中国人民大学出版社,第二版具体是哪个颜色的,谢谢啦 谁知道兰州拉面的汤料配方? 金融考研书用哪些比较好? 女士朗琴手表应换索尼什么型号的电池 谁能推荐一本金融知识入门书? 牛肉面加盟店排行榜 牛肉面加盟哪家好