Чуть чуть не правильно объяснил, сорри! Суть вот в чем например есть функция такая вот:
EXPORT int __stdcall Control_Scheme(int i)
{
int CMsize=0;
int nv,tv,j,u,np,ng;
int *indV;
char ConvBuf[11];
ConvBuf[10]='\0';
double Fsum,eps=1.e-8;
indV= new int[CC.NP];
TSK->LetContinue=true;
nv = 0;
for(u=0; u< CC.NP; u++)
{
tv = 0;
for(j=0; j< CC.NG; j++)
{
if(CC.SS[2*j+0] == u) tv++;
if(CC.SS[2*j+1] == u) tv++;
}
if(tv == 1)
{
indV[nv] = u;
nv++;
}
}
if(nv == 0)
{
Fsum = 0.0;
for(j=0; j< CC.NQ; j++)
Fsum += CC.zQ[j];
if(fabs(Fsum) > eps)
{
// fprintf(pfp,"ФАТАЛЬНАЯ ОШИБКА: SUMMA(Q%d)#0\n",i);
CMsize++;
TSK->CM.resize(CMsize);
//_ltoa_s(i,ConvBuf,11,10);
_ltoa(i,ConvBuf,10);
TSK->CM[TSK->CM.size()-1].Message=TSK->ContStr+ConvBuf+"ФАТАЛЬНАЯ ОШИБКА: SUMMA(Q)#0";
TSK->CM[TSK->CM.size()-1].Status=0;//нельзя произвести расчет
}
if(CC.NIP > 1)
{
CMsize++;
TSK->CM.resize(CMsize);
_ltoa(i,ConvBuf,10);
TSK->CM[TSK->CM.size()-1].Message=TSK->ContStr+ConvBuf+"ФАТАЛЬНАЯ ОШИБКА: NPfix>1";
TSK->CM[TSK->CM.size()-1].Status=0;//нельзя произвести расчет
}
if(CC.NJZ > 1)
{
CMsize++;
TSK->CM.resize(CMsize);
_ltoa(i,ConvBuf,10);
TSK->CM[TSK->CM.size()-1].Message=TSK->ContStr+ConvBuf+"ФАТАЛЬНАЯ ОШИБКА: NJfix>1";
TSK->CM[TSK->CM.size()-1].Status=0;//нельзя произвести расчет
}
Fsum = 0.0;
for(j=0; j< CC.NIG; j++)
Fsum += CC.zG[j];
if(fabs(Fsum) > eps)
{
CMsize++;
TSK->CM.resize(CMsize);
_ltoa(i,ConvBuf,10);
TSK->CM[TSK->CM.size()-1].Message=TSK->ContStr+ConvBuf+"ФАТАЛЬНАЯ ОШИБКА: NGist#0";
TSK->CM[TSK->CM.size()-1].Status=0;//нельзя произвести расчет
}
}
else
{
np = ng = 0;
for(u=0; u< nv; u++)
{
tv = 1;
for(j=0; j<CC.NIP; j++)
if(indV == CC.iP[j])
{
tv = 0;
np++;
}
for(j=0; j<CC.NIG; j++)
if(indV == CC.iG[j])
{
tv = 0;
ng++;
}
if(tv)
{
CMsize++;
TSK->CM.resize(CMsize);
_ltoa(i,ConvBuf,10);
TSK->CM[TSK->CM.size()-1].Message=TSK->ContStr+ConvBuf+", "+TSK->NodeStr;
_ltoa(indV,ConvBuf,10);
TSK->CM[TSK->CM.size()-1].Message=TSK->CM[TSK->CM.size()-1].Message+ConvBuf +": не заданы фиксированное давление или источник расхода";
TSK->CM[TSK->CM.size()-1].Status=0;//нельзя произвести расчет
}
}
if(np == 0)
{
Fsum = 0.0;
for(j=0; j< CC.NIG; j++) Fsum += CC.zG[j];
if(fabs(Fsum) > eps)
{
CMsize++;
TSK->CM.resize(CMsize);
_ltoa(i,ConvBuf,10);
TSK->CM[TSK->CM.size()-1].Message=TSK->ContStr+ConvBuf+": ПРЕДУПРЕЖДЕНИЕ: SUMMA(Gi)#0";
TSK->CM[TSK->CM.size()-1].Status=0;//нельзя произвести расчет
}
}
if(np>0 && CC.NIP > np)
{
CMsize++;
TSK->CM.resize(CMsize);
_ltoa(i,ConvBuf,10);
TSK->CM[TSK->CM.size()-1].Message=TSK->ContStr+ConvBuf+" ФАТАЛЬНАЯ ОШИБКА: переопределено число заданных давлений в узлах";
TSK->CM[TSK->CM.size()-1].Status=0;//нельзя произвести расчет
}
for(u=0; u< nv; u++)
{
tv = 0;
for(j=0; j<CC.NIP; j++)
if(indV == CC.iP[j]) tv++;
for(j=0; j<CC.NIG; j++)
if(indV == CC.iG[j]) tv++;
if(tv > 1)
{
CMsize++;
TSK->CM.resize(CMsize);
_ltoa(i,ConvBuf,10);
TSK->CM[TSK->CM.size()-1].Message=TSK->ContStr+ConvBuf+", "+TSK->NodeStr;
_ltoa(indV,ConvBuf,10);
TSK->CM[TSK->CM.size()-1].Message=TSK->CM[TSK->CM.size()-1].Message+ConvBuf +" ФАТАЛЬНАЯ ОШИБКА: одновременно заданы два граничных условия";
TSK->CM[TSK->CM.size()-1].Status=0;//нельзя произвести расчет
}
}
if(nv==1)
{
Fsum = 0.0;
for(j=0; j< CC.NQ; j++)
Fsum += CC.zQ[j];
if(fabs(Fsum) > eps)
{
CMsize++;
TSK->CM.resize(CMsize);
_ltoa(i,ConvBuf,10);
TSK->CM[TSK->CM.size()-1].Message=TSK->ContStr+ConvBuf+" ФАТАЛЬНАЯ ОШИБКА: обнаружен не баланс источников (стоков) тепла";
TSK->CM[TSK->CM.size()-1].Status=0;//нельзя произвести расчет
}
}
}
delete[] indV;
if(TSK->CM.size()>0) TSK->LetContinue=false;//предупреждния есть
return TSK->LetContinue;
}
-----------------------------------------------------------------------------------------------------------------------------------
Т.е ошибок чисто теоретически даже в этой функции может быть несколько. Я хочу чтобы, как только решатель обнаружил ошибку, то он сразу сообщил о ней в Dll... Вот вопрос в том какой механизм выбрать... Точнее как грамотнее всего реализовать его!