函数说明为:
HRESULT IDoc::Read ( const _variant_t & PathOrData, const _variant_t & Password )如何把一个字符串(文件路径, char* filename)或一块内存数据(文件内容,另外有一个长度信息,就是void* data, int length)赋给_variant_t类型。反过来,如何从_variant_t类型得到一块内存数据(包括长度)。

解决方案 »

  1.   

    初始化的时候就可以阿。
    string str = _T("HEHHE");
    _variant vt;
    vt = str;
      

  2.   

    很好解决!
    这样写:
    _bstr_t fname(filename);
    _variant_t varFName(fname);
    因为_bstr_t可以得到filename的长度通过,fname.length();
    _bstr_t是BSTR的封装,它可以记录字符串长度!哈哈!没问题的!
    反过来怎么用就不用我说了!
      

  3.   

    试了一上午,还是不行。read总是抛出_com_error
    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);
      

  4.   

    COM生成的函数是: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;
    }
      

  5.   

    还有:    
    virtual HRESULT __stdcall raw_Read (
            VARIANT PathOrData,
            VARIANT Password = vtMissing ) = 0;
      

  6.   

    使用CComVariant啊
    CComVariant vName("test");
    然后再赋值给_variant_t变量
      

  7.   

    重新整理一下。把COM import进来后,VC生成的函数: 
    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.
      

  8.   

    IDocPtr m_doc;
    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的值对不对!
      

  9.   

    IDocPtr m_doc;//这里最好写成:  IDocPtr m_doc = NULL;