Виснит Global Script после выполнения функции
записи в файл
Хоружевский
Роман; 9.9.03
Данный скрипт написан на встроенном в WinCC С. Скрипт работает
вроде нормально, записывает в файл как положено, но после
выполнения все остальные скрипты подвисают и не работают, кто
знает, в чем может быть причина?
void SaveUstToFile()
{
float Test[36];//Массив значений уставок
char* szPrjPath;//Каталог файлов проекта
char* szNameFile;
FILE *outf;//Файловый идентификатор
//char szNameTag[30];//Имя тега
//int iIndex,jIndex;
//jIndex = 0;//Текущий индекс массива уставок
{
Test[0]= GetTagFloatWait("P_vac");
Test[1]= GetTagFloatWait("I_vac");
Test[2]= GetTagFloatWait("D_vac");
Test[3]= GetTagFloatWait"Zone_vac");
Test[4]= GetTagFloatWait "T_call_vac");
.
.
.
Test[35]= GetTagFloatWait("Dead_PG");
szPrjPath = GetTagChar("ProjectDir");
szNameFile = strcat(szPrjPath,"PID_REGU.DAT");
outf=fopen(szNameFile,"wb");//Откр файл
fwrite (Test, sizeof(float),36,outf);//Сохранить уставки в файл
fclose(outf);//Закрыть файл
}
Re: Виснит Global Script после выполнения
функции записи в файл
Roy; 9.9.03
У меня вначале тоже висло, но записываемый файл создавай заранее.
Например текстовой wb.ust.
Re: Виснит Global Script после выполнения
функции записи в файл
Goodvin; 10.9.03
Попробуй писать в файл посредством fprintf, я обычно так делаю - не
было проблем.
Re: Виснит Global Script после выполнения
функции записи в файл
Шестаков
Александр; 21.10.03
Ошибка в следующей строке:
szNameFile = strcat(szPrjPath,"PID_REGU.DAT");
Функция strcat добавляет строку PID_REGU.DAT в конец строки по
указателю szPrjPath. Но т.к. это указатель на строку в памяти,
размер которой равен размеру строки в теге. Таким образом ты
выходишь за диапазон строкового массива выделенного при чтении
текстового тега. Отсюда и зависание!
Re: Виснит Global Script после выполнения
функции записи в файл
Шимолин
Сергей; 22.10.03
А вообще когда нужно сохранять какие-нибудь настройки удобно
работать через INI-файлы..не надо заботиться о структуре файла.
если надо вышлю..
Re: Виснит Global Script после выполнения
функции записи в файл
Шимолин
Сергей; 23.10.03
несколько человек заинтересовалось, поэтому кидаю пример на
форум..
//INI file write
#pragma code("kernel32.dll");
BOOL WritePrivateProfileStringA(LPCTSTR lpAppName, LPCTSTR
lpKeyName, LPCTSTR lpString, LPCTSTR lpFileName);
#pragma code();
WritePrivateProfileStringA("First","FirstKey","testFirstKey","d:\\TEMP\\initest.ini");
//INI file read
#pragma code("kernel32.dll");
DWORD GetPrivateProfileStringA(LPCTSTR lpAppName, LPCTSTR
lpKeyName, LPCTSTR lpDefault, LPTSTR lpReturnString,DWORD
nSize,LPCSTR lpFileName);
#pragma code();
char ReturnString[100];
DWORD nSize = 100;
GetPrivateProfileStringA("Third","teststring","Pitch!!",ReturnString,nSize,"d:\\TEMP\\initest.ini");
printf("value of nSize %d\r\n",nSize);
printf("ini-file read inisection third=%s\r\n",ReturnString);