函数说明为:
HRESULT IDoc::Read ( const _variant_t & PathOrData, const _variant_t & Password )如何把一个字符串(文件路径, char* filename)或一块内存数据(文件内容,另外有一个长度信息,就是void* data, int length)赋给_variant_t类型。反过来,如何从_variant_t类型得到一块内存数据(包括长度)。
HRESULT IDoc::Read ( const _variant_t & PathOrData, const _variant_t & Password )如何把一个字符串(文件路径, char* filename)或一块内存数据(文件内容,另外有一个长度信息,就是void* data, int length)赋给_variant_t类型。反过来,如何从_variant_t类型得到一块内存数据(包括长度)。
string str = _T("HEHHE");
_variant vt;
vt = str;
这样写:
_bstr_t fname(filename);
_variant_t varFName(fname);
因为_bstr_t可以得到filename的长度通过,fname.length();
_bstr_t是BSTR的封装,它可以记录字符串长度!哈哈!没问题的!
反过来怎么用就不用我说了!
HRESULT值是-2147467261 (80004003) Invalid pointer.代码如下:
IDocPtr m_doc;
m_doc.CreateInstance(__uuidof(Doc));
_bstr_t fname(infilename);
_variant_t varFName(fname);
ret = m_doc->Read(varFName);
const _variant_t & PathOrData,
const _variant_t & Password = vtMissing );inline HRESULT IDoc::Read ( const _variant_t & PathOrData, const _variant_t & Password ) {
HRESULT _hr = raw_Read(PathOrData, Password);
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
return _hr;
}
virtual HRESULT __stdcall raw_Read (
VARIANT PathOrData,
VARIANT Password = vtMissing ) = 0;
CComVariant vName("test");
然后再赋值给_variant_t变量
HRESULT Read (const _variant_t & PathOrData, const _variant_t & Password = vtMissing );inline HRESULT IDoc::Read ( const _variant_t & PathOrData, const _variant_t & Password )
{
HRESULT _hr = raw_Read(PathOrData, Password);
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
return _hr;
}virtual HRESULT __stdcall raw_Read (
VARIANT PathOrData,
VARIANT Password = vtMissing ) = 0;我的代码是:
定义类成员变量:IDocPtr m_doc;
在构造函数中初始化:m_doc.CreateInstance(__uuidof(Doc));在类函数中:
_bstr_t fname(infilename); // const char* infilename
_variant_t varFName(fname);
ret = m_doc->Read(varFName);执行到Read抛出_com_error,HRESULT值是-2147467261 (80004003) Invalid pointer.
HRESULT hr = m_doc.CreateInstance(__uuidof(Doc));
if(FAILED(hr))
{
//看看成功了没有
}_bstr_t fname(infilename); // const char* infilename
_variant_t varFName(fname);
ret = m_doc->Read(varFName); //这里跟进去f11看看到底是varFName的问题还是什么问题进去后看看varFName的值对不对!