本文整理汇总了C++中CVariant::MakeArray方法的典型用法代码示例。如果您正苦于以下问题:C++ CVariant::MakeArray方法的具体用法?C++ CVariant::MakeArray怎么用?C++ CVariant::MakeArray使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CVariant
的用法示例。
在下文中一共展示了CVariant::MakeArray方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: doCalcOverall
void CapeOpenCalculator::doCalcOverall()
{
// Collect all props to calc.
CVariant propNames;
propNames.MakeArray(COPropsOverall::Count, VT_BSTR);
for (size_t i = 0; i < COPropsOverall::Count; i++)
{
propNames.SetStringAt(i, COPropsOverall::At[i]);
}
// Only overall phase.
CVariant phaseNames;
phaseNames.MakeArray(1, VT_BSTR);
phaseNames.SetStringAt(0, COPhasesOverall::OVERALL);
// The calculation.
_socket->CalcProps(propNames, phaseNames);
}
示例2: doCalcPhases
void CapeOpenCalculator::doCalcPhases(const size_t* phaseIds, size_t nPhases)
{
// Collect all props to calc.
CVariant propNames;
propNames.MakeArray(COProps1Ph::Count, VT_BSTR);
for (size_t i = 0; i < COProps1Ph::Count; i++)
{
propNames.SetStringAt(i, COProps1Ph::At[i]);
}
// Collect all phases to calc.
CVariant phaseNames;
phaseNames.MakeArray(nPhases, VT_BSTR);
for (size_t i = 0; i < nPhases; i++)
{
phaseNames.SetStringAt(i, COPhases1Ph::At[phaseIds[i]]);
}
// The calculation.
_socket->CalcProps(propNames, phaseNames);
}
示例3: BaseCalculator
CapeOpenCalculator::CapeOpenCalculator(const MaterialCalculatorSetup* setupInfo)
: BaseCalculator(setupInfo)
{
// Get the property package name from the library name
string packageName = _libraryName.substr(_libraryName.find(".")+1);
if (packageName.find("StanMix") != string::npos ||
packageName.find("PCP-SAFT") != string::npos ||
packageName.find("TPSI") != string::npos ||
packageName.find("vThermo") != string::npos ||
packageName.find("GasMix") != string::npos ||
packageName.find("IF97") != string::npos ||
packageName.find("RefProp") != string::npos)
{
warningMessage("CapeOpenCalculator", "Calculation of properties under "
"specific phases is not supported by this property "
"package. The returned values will be an average over "
"the present phases.\n");
}
// Get the property package by its name
LPDISPATCH pack;
HRESULT hr = ppm->getPropertyPackage(packageName, &pack);
if (FAILED(hr))
{
errorMessage("CapeOpenCalculator", "Unable to load the specified "
"property package.\nCAPE-OPEN error:\n\t%s",
COUtilities::GetCOErrorAsString(pack, hr).c_str());
return;
}
// The socket handles the property package from here.
_socket = new CapeOpenSocket_1_0(pack);
pack->Release();
// Set the substance on the material object
CVariant compIds;
compIds.MakeArray(_numCompounds, VT_BSTR);
compIds.SetStringAt(0, _bstr_t(setupInfo->compounds));
for(int i = 0; i < _numCompounds; ++i)
{
compIds.SetStringAt(i, _bstr_t(_compounds[i].c_str()));
}
// set component ids of material object
_socket->GetMaterialObject()->setComponentIds(compIds.Value());
// Get the phase ids in order to determine which constants should be available
CVariant phaseNames;
//phaseNames.MakeArray(COPhases1Ph::Count, VT_R8);
_socket->GetSupportedPhases(phaseNames);
_socket->GetMaterialObject()->setVaporPhasePossible(false);
_socket->GetMaterialObject()->setLiquidPhasePossible(false);
_socket->GetMaterialObject()->setSolidPhasePossible(false);
std::wstring error;
if (phaseNames.CheckArray(VT_BSTR, error))
{
// Add the packages to the list.
for (int i = 0; i < phaseNames.GetCount(); ++i)
{
BSTR phaseName = phaseNames.GetStringAt(i);
if(lstrcmpi(phaseName, COPhases1Ph::VAPOR) == 0)
_socket->GetMaterialObject()->setVaporPhasePossible(true);
if(lstrcmpi(phaseName, COPhases1Ph::LIQUID) == 0)
_socket->GetMaterialObject()->setLiquidPhasePossible(true);
if(lstrcmpi(phaseName, COPhases1Ph::SOLID) == 0)
_socket->GetMaterialObject()->setSolidPhasePossible(true);
}
}
// set the fluid constants
this->setSubstanceConstants();
}
示例4: setSubstanceConstants
void CapeOpenCalculator::setSubstanceConstants()
{
// Let the property package calc the constant props
CVariant props;
if(_socket->GetMaterialObject()->getLiquidPhasePossible())
props.MakeArray(COPropsConst::Count, VT_BSTR);
else
props.MakeArray(1, VT_BSTR);
for (int i = 0; i < COPropsConst::Count; i++)
{
if(wcscmp(COPropsConst::At[i], COPropsConst::TCRIT) == 0 || wcscmp(COPropsConst::At[i], COPropsConst::PCRIT) == 0)
{
if(_socket->GetMaterialObject()->getLiquidPhasePossible())
{
props.SetStringAt(i, COPropsConst::At[i]);
}
else
{
warningMessage("CapeOpenCalculator", "Fluid constant \"%S\" is unavailable for %s.",
COPropsConst::At[i], _libraryName.c_str());
}
}
else
{
props.SetStringAt(i, COPropsConst::At[i]);
}
}
CVariant results;
results.MakeArray(COPropsConst::Count * _numCompounds, VT_VARIANT);
_socket->GetConstants(props, results);
// Get the results
for(int i = 0; i < _numCompounds; ++i)
{
FluidConstants fc;
fc.MM = V_R8(&results.GetVariantAt(COPropsConst::MMOL_ID * _numCompounds + i)); // result is expected in kg/mol (SI)!
if(_socket->GetMaterialObject()->getLiquidPhasePossible())
{
fc.Tc = V_R8(&results.GetVariantAt(COPropsConst::TCRIT_ID * _numCompounds + i));
fc.pc = V_R8(&results.GetVariantAt(COPropsConst::PCRIT_ID * _numCompounds + i));
}
this->_fluidConstants.push_back(fc);
}
// set molar mass of material object (mixtures: temporarily set to molar mass of first compound, total/average is calculated in setSubstanceProperties())
_socket->GetMaterialObject()->setMM(_fluidConstants[0].MM);
// TODO: Get the other constants using a flash
/*
this->doFlash(this->_fluidConstants.pc, this->_fluidConstants.Tc,
COPropsOverall::PRESSURE, COPropsOverall::TEMPERATURE,
COFlashTypes::TP);
this->doCalcOverall();
this->getPropOverall(COPropsOverall::DENSITY, this->_fluidConstants.dc);
this->getPropOverall(COPropsOverall::ENTHALPY, this->_fluidConstants.hc);
this->getPropOverall(COPropsOverall::ENTROPY, this->_fluidConstants.sc);
*/
}