NODE *memberp_help(NODE *args, BOOLEAN notp, BOOLEAN substr) { NODE *obj1, *obj2, *val; int leng; int caseig = varTrue(Caseignoredp); val = FalseName(); obj1 = car(args); obj2 = cadr(args); if (is_list(obj2)) { if (substr) return FalseName(); while (obj2 != NIL && NOT_THROWING) { if (equalp_help(obj1, car(obj2), caseig)) return (notp ? obj2 : TrueName()); obj2 = cdr(obj2); if (check_throwing) break; } return (notp ? NIL : FalseName()); } else if (nodetype(obj2) == ARRAY) { int len = getarrdim(obj2); NODE **data = getarrptr(obj2); if (notp) err_logo(BAD_DATA_UNREC,obj2); if (substr) return FalseName(); while (--len >= 0 && NOT_THROWING) { if (equalp_help(obj1, *data++, caseig)) return TrueName(); } return FalseName(); } else { NODE *tmp; int i; if (aggregate(obj1)) return (notp ? Null_Word : FalseName()); setcar (cdr(args), cnv_node_to_strnode(obj2)); obj2 = cadr(args); setcar (args, cnv_node_to_strnode(obj1)); obj1 = car(args); tmp = NIL; if (obj1 != UNBOUND && obj2 != UNBOUND && getstrlen(obj1) <= getstrlen(obj2) && (substr || (getstrlen(obj1) == 1))) { leng = getstrlen(obj2) - getstrlen(obj1); setcar(cdr(args),make_strnode(getstrptr(obj2), getstrhead(obj2), getstrlen(obj1), nodetype(obj2), strnzcpy)); tmp = cadr(args); for (i = 0; i <= leng; i++) { if (equalp_help(obj1, tmp, caseig)) { if (notp) { setstrlen(tmp,leng+getstrlen(obj1)-i); return tmp; } else return TrueName(); } setstrptr(tmp, getstrptr(tmp) + 1); } } return (notp ? Null_Word : FalseName()); } }
BOOL CmyWord::Open(CString fileName) { if(FALSE == PathFileExists(fileName) || -1 == fileName.Find(_T(".doc"))) { AfxMessageBox(_T("请确定路径是否正确!"),MB_OK|MB_ICONSTOP); return FALSE; } CComVariant Read(FALSE); CComVariant AddToR(FALSE); CComVariant Name(fileName); COleVariant vTrue((short)TRUE); COleVariant vFalse((short)FALSE); COleVariant varstrNull(_T("")); COleVariant varZero((short)0); COleVariant varTrue(short(1),VT_BOOL); COleVariant varFalse(short(0),VT_BOOL); COleVariant vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR); if(!m_wdApp.m_lpDispatch) { if(CreateApp()==FALSE) { return FALSE; } } if(!m_wdDoc.m_lpDispatch) { m_wdDocs=m_wdApp.GetDocuments(); if(!m_wdDocs.m_lpDispatch) { AfxMessageBox(_T("DocuMent 对象创建失败")); CloseApp(); return FALSE; } } CComVariant format(0);//打开方式 0 为doc的打开方式 //doc=docs.Open(&Name,varFalse,&Read,&AddToR,vOpt,vOpt,vFalse,vOpt,vOpt,&format,vOpt,vTrue,vOpt,vOpt,vOpt,vOpt); m_wdDoc = m_wdDocs.Add(&Name, vOpt, vOpt, vOpt); if(!m_wdDoc.m_lpDispatch) { AfxMessageBox(_T("文件打开失败")); CloseApp(); return FALSE; } else { m_wdSel=m_wdApp.GetSelection(); if(!m_wdSel.m_lpDispatch) { AfxMessageBox(_T("打开失败")); CloseApp(); return FALSE; } return TRUE; } }
BOOL CmyWord::CreateDocument() { if (!m_wdDocs.m_lpDispatch) { AfxMessageBox(_T("Documents为空!"), MB_OK|MB_ICONWARNING); return FALSE; } COleVariant varTrue(short(1),VT_BOOL),vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); CComVariant Template(_T("")); //没有使用WORD的文档模板 CComVariant NewTemplate(false),DocumentType(0),Visible; m_wdDocs.Add(&Template,&NewTemplate,&DocumentType,&Visible); //得到document变量 m_wdDoc = m_wdApp.GetActiveDocument(); if (!m_wdDoc.m_lpDispatch) { AfxMessageBox(_T("Document获取失败!"), MB_OK|MB_ICONWARNING); return FALSE; } //得到selection变量 m_wdSel = m_wdApp.GetSelection(); if (!m_wdSel.m_lpDispatch) { AfxMessageBox(_T("Select获取失败!"), MB_OK|MB_ICONWARNING); return FALSE; } //得到Range变量 m_wdRange = m_wdDoc.Range(vOptional,vOptional); if(!m_wdRange.m_lpDispatch) { AfxMessageBox(_T("Range获取失败!"), MB_OK|MB_ICONWARNING); return FALSE; } return TRUE; }
/*************************************************************************** * Create a prototype object ***************************************************************************/ bool CErrorObject::InitializeVm( CCilVm& vm ) { RID rid = vm.createPrototypeObject( vm.getErrorObjectRID(), vm.getMetaData().getObjectNameRID( vm.getErrorObjectRID() ), vm.getObjectRID() ); assert( rid == vm.getErrorObjectRID() ); //--------------------------------------------------------------------------- //Initialize prototype property //--------------------------------------------------------------------------- CVmObject& protoobj = vm.getPrototypeObject( vm.getErrorObjectRID() ); CVariable varName( NAME_BUILTIN_ERROR_OBJECT ); CVariable var( -1 ); protoobj.setProperty( NAME_BUILTIN_ERROR_PROPERTY_NAME, varName ); protoobj.setProperty( NAME_BUILTIN_ERROR_PROPERTY_NUMBER, var ); //--------------------------------------------------------------------------- //Bind global object //--------------------------------------------------------------------------- CVmObject* pObj = vm.createObject( vm.getErrorObjectRID() ); CVariable obj( pObj, OPERAND_FLAG( OPERAND_FLAG_DONTDELETE | OPERAND_FLAG_DONTENUM | OPERAND_FLAG_READONLY ) ); //Set true as an object value.. CVariable varTrue( true ); pObj->setValue( varTrue ); CG_SYMBOL_INFORMATION info = vm.querySymbolInformation( NAME_BUILTIN_ERROR_OBJECT ); vm.setStaticField( info.rid, obj, true ); //Force over write it //Add properties of prototype object here //--------------------------------------------------------------------------- // Bind System functions //--------------------------------------------------------------------------- for( int32_t i = 0; i<sizeof( initParams ) / sizeof( initParams[ 0 ] ); ++i ) { int32_t iParams; iParams = (int32_t)RidFromToken( initParams[ i ].ridParam ); if( isBuiltinRid( initParams[ i ].ridParam ) ) { iParams = RidFromToken( -iParams ) - 1; } //----------------------------------------------------------------------- //Register methods //----------------------------------------------------------------------- bool b = vm.bindBuiltinMethod( wstring( initParams[ i ].pStrSymbol ), initParams[ i ].pMethod, iParams ); if( !b ) return false; } return true; }