char const* CMyContextBase::GetTypeString(void)const { if (GetMetaData()->GetTaskDef()->GetDefaultLanguage() == 0) return GetBaseInfo()->EngTypeString; else return GetBaseInfo()->RusTypeString; }
char const* CMyContextBase::GetMethodName(int iMethNum,int iMethodAlias)const { _S_MyContextBaseInfo* pInfo=GetBaseInfo(); if(((DWORD)iMethNum)>=pInfo->methCount || ((DWORD)iMethodAlias)>1) return NULL; return GetBaseInfo()->pMethodDef[iMethNum].Names[iMethodAlias]; }
int CMyContextBase::IsPropWritable(int iPropNum)const { _S_MyContextBaseInfo* pInfo=GetBaseInfo(); if(((DWORD)iPropNum)>=pInfo->propCount) return 0; return pInfo->pPropDef[iPropNum].pSetProp!=NULL; }
char const* CMyContextBase::GetPropName(int iPropNum, int iAlias)const { _S_MyContextBaseInfo* pInfo=GetBaseInfo(); if(((DWORD)iPropNum)>=pInfo->propCount || ((DWORD)iAlias)>1) return 0; return pInfo->pPropDef[iPropNum].Names[iAlias]; }
void CRecordInfo::Serialize(CArchive& ar) { if (ar.IsStoring()) { ar << ARCHIVE_VERSION; ar << sizeof(RECORD_INFO); ar.Write(&GetBaseInfo(), sizeof(RECORD_INFO)); } else { int Version; ar >> Version; if (Version > ARCHIVE_VERSION) AfxThrowArchiveException(CArchiveException::badIndex, ar.m_strFileName); int BaseInfoSize; ar >> BaseInfoSize; ar.Read(&GetBaseInfo(), BaseInfoSize); } }
int CMyContextBase::SetPropVal(int iPropNum,CValue const &vValue) { _S_MyContextBaseInfo* pInfo=GetBaseInfo(); if(((DWORD)iPropNum)>=pInfo->propCount) return 0; return (this->*pInfo->pPropDef[iPropNum].pSetProp)(vValue); }
void COptionsInfo::Copy(const COptionsInfo& Info) { CEngineOptions::Copy(Info); // copy base class const OPTIONS_INFO *src = &Info; // automatic upcast to base struct memcpy(&GetBaseInfo(), src, sizeof(OPTIONS_INFO)); m_MidiDevName = Info.m_MidiDevName; }
int CMyContextBase::FindProp(char const * Name)const { _S_MyContextBaseInfo* pInfo = GetBaseInfo(); if (pInfo->propCount) return (int)pInfo->pPropMap->GetKey(Name); else return -1; }
int CMyContextBase::FindMethod(char const * lpMethodName)const { _S_MyContextBaseInfo* pInfo = GetBaseInfo(); if (pInfo->methCount) return (int)pInfo->pMethMap->GetKey(lpMethodName); else return -1; }
void COptionsInfo::Serialize(CArchive& ar) { CEngineOptions::Serialize(ar); // serialize base class if (ar.IsStoring()) { ar << ARCHIVE_VERSION; ar << sizeof(OPTIONS_INFO); ar.Write(&GetBaseInfo(), sizeof(OPTIONS_INFO)); ar << m_MidiDevName; } else { int Version; ar >> Version; if (Version > ARCHIVE_VERSION) AfxThrowArchiveException(CArchiveException::badIndex, ar.m_strFileName); int BaseInfoSize; ar >> BaseInfoSize; ar.Read(&GetBaseInfo(), BaseInfoSize); ar >> m_MidiDevName; } }
int CMyContextBase::GetParamDefValue(int iMethodNum,int iParamNum,CValue *pDefValue)const { _S_MyContextBaseInfo* pInfo=GetBaseInfo(); if(((DWORD)iMethodNum)>=pInfo->methCount || ((DWORD)iParamNum)>=pInfo->pMethodDef[iMethodNum].NumberOfParam) return FALSE; PF_GET_PARAM_DEF pFunc=pInfo->pMethodDef[iMethodNum].pDefValProc; if(pFunc) return (this->*pFunc)(iParamNum,pDefValue); return FALSE; }
int CMyContextBase::IsOleContext(void)const { // artbear int regEBX = 0; __asm { mov regEBX, ebx // В этом регистре 1С хранит количество параметров при вызове метода } GetBaseInfo()->m_CountParametersInCallMethod = regEBX; // сохраним это значение // end return FALSE; }
int CMyContextBase::CallAsProc(int iMethNum,CValue **ppValue) { _S_MyContextBaseInfo* pInfo=GetBaseInfo(); if(((DWORD)iMethNum)>=pInfo->methCount) return FALSE; const _S_MethDef& MethDef = pInfo->pMethodDef[iMethNum]; if (MethDef.bIsUnLimParMethod) { return (this->*pInfo->pMethodDef[iMethNum].pDoProcWithUnLimParams)(pInfo->m_CountParametersInCallMethod, ppValue); } return (this->*pInfo->pMethodDef[iMethNum].pDoProc)(ppValue); }
int CMyContextBase::HasRetVal(int iMethodNum)const { _S_MyContextBaseInfo* pInfo=GetBaseInfo(); if(((DWORD)iMethodNum)>=pInfo->methCount) return 0; const _S_MethDef& MethDef = pInfo->pMethodDef[iMethodNum]; if (MethDef.bIsUnLimParMethod) { return MethDef.pDoFuncWithUnLimParams != NULL;; } //return pInfo->pMethodDef[iMethodNum].pDoFunc != NULL; return MethDef.pDoFunc != NULL; }
int CMyContextBase::GetNParams(int iMethodNum)const { _S_MyContextBaseInfo* pInfo=GetBaseInfo(); if(((DWORD)iMethodNum)>=pInfo->methCount) return 0; const _S_MethDef& MethDef = pInfo->pMethodDef[iMethodNum]; if (MethDef.bIsUnLimParMethod) { // если передали меньше параметров, чем должно быть по умолчанию, // 1С должна выдать стандартную ошибку о количестве параметров return pInfo->m_CountParametersInCallMethod <= MethDef.NumberOfParam ? MethDef.NumberOfParam : pInfo->m_CountParametersInCallMethod; //return min(pInfo->m_CountParametersInCallMethod, MethDef.NumberOfParam); } //return pInfo->pMethodDef[iMethodNum].NumberOfParam; return MethDef.NumberOfParam; }
COptionsInfo::COptionsInfo() { ZeroMemory(&GetBaseInfo(), sizeof(OPTIONS_INFO)); }
CRecordInfo::CRecordInfo() { ZeroMemory(&GetBaseInfo(), sizeof(RECORD_INFO)); }
void CRecordInfo::Copy(const CRecordInfo& Info) { const RECORD_INFO *src = &Info; // automatic upcast to base struct memcpy(&GetBaseInfo(), src, sizeof(RECORD_INFO)); }
int CMyContextBase::GetNMethods(void)const { return GetBaseInfo()->methCount; }
int CMyContextBase::GetNProps(void)const { return GetBaseInfo()->propCount; }