本帖最后由 chongdede 于 2010-05-28 11:29:16 编辑

解决方案 »

  1.   

    查文档。PS IDispatch的参数应该倒序
      

  2.   

    PS IDispatch的参数倒序 代码如下:
    VARIANT varDocument = {0};
    CComVariant varParams[15];
    varParams[14].vt = VT_BSTR;
    //varParams[14].bstrVal = ::SysAllocString(A2OLE(FilePath));//带路径的文件名 string FileName
    varParams[14].bstrVal = ::SysAllocString(A2OLE("c:\\aaa.doc"));//带路径的文件名 string FileName
    varParams[13].vt =VT_BOOL ;
    varParams[13].boolVal = VARIANT_FALSE;// 表示如果打开的文件不是 WPS 文件时,是否显示“文件转换”对话框,默认值为 False
        varParams[12].vt = VT_BOOL;
    varParams[12].boolVal = VARIANT_TRUE;// bool ReadOnly
        varParams[11].vt = VT_BOOL;
    varParams[11].boolVal = VARIANT_FALSE;// bool AddToRecentFiles
    varParams[10].vt = VT_BSTR;
    varParams[10].bstrVal = NULL;//string PasswordDocument 
    varParams[9].vt = VT_BSTR;
    varParams[9].bstrVal = NULL;//string PasswordTemplate 
    varParams[8].vt = VT_BOOL;
    varParams[8].boolVal = VARIANT_FALSE;// bool Revert
    varParams[7].vt = VT_BSTR;
    varParams[7].bstrVal = NULL;//string WritePasswordDocument 
    varParams[6].vt = VT_BSTR;
    varParams[6].bstrVal = NULL;//string WritePasswordTemplate 
    varParams[5].vt = VT_I4;
    varParams[5].lVal = 100;         //  int Format
    varParams[4].vt = VT_I4;
    varParams[4].lVal = 0;            // int Encoding
        varParams[3].vt = VT_BOOL;
    varParams[3].boolVal = VARIANT_TRUE;//bool Visible
        varParams[2].vt = VT_BOOL;
    varParams[2].boolVal = VARIANT_FALSE;//bool  OpenAndRepair
    varParams[1].vt = VT_I4;
    varParams[1].lVal = 0;            //int DocumentDirection
        varParams[0].vt = VT_BOOL;
    varParams[0].boolVal = VARIANT_FALSE;//bool NoEncodingDialog
    InvokeN(varDocuments.pdispVal, L"Open", varParams, 15, &varDocument);