Пётр Кушнир писал(а):
уважаемый, тут речь немного не о том. почитайте про серверный режим работы среды и использование ключа коммандной строки /use
Мне кажется, что для задач указанных в параграфе 4 Серверная установка «Руководство пользователя», в рабочей директории удобно создавать файлы с временными именами, используя WinApi-функцию GetTempFileName. Она позволяет добавлять к префиксу имени файла, например, текущее системное время.
Попытался перевести такую программку с С++ при помощи утилиты с2ср из коллекции Helmut’а Zinn’а. Удивительно, что листинг перевода содержит GOTO и метки переходов. Указать правильные типы большого труда не составляет, но может быть есть более грубые нестыковки. Поэтому приведу оба листинга.
Код:
LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
static HANDLE hFile;
static char szTmpFile[MAX_PATH+1];
switch( uMsg )
{
case WM_CREATE :
{
char szTmpPath[MAX_PATH+1];
GetTempPath( MAX_PATH, szTmpPath );
GetTempFileName( szTmpPath, "GEN", 0, szTmpFile );
hFile = CreateFile( szTmpFile, GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_ALWAYS,
FILE_ATTRIBUTE_TEMPORARY, NULL );
}
break;
………………………………………………….
case WM_DESTROY :
if ( hFile )
{
CloseHandle( hFile );
DeleteFile( szTmpFile );
}
PostQuitMessage(0);
break;
default :
return( DefWindowProc( hWnd, uMsg, wParam, lParam ) );
}
return( 0L );
}
Код:
(*-----------------------------------------------------------------------------
-- Von C nach Pascal ьbersetzt mit dem Program CTOPAS
-- (C) Helmut Zinn V95/12/12
-----------------------------------------------------------------------------*)
MODULE TmpFile;
IMPORT StdLog;
PROCEDURE ^ WndProc (hWnd:HWND; uMsg:UINT; wParam:WPARAM; lParam:LPARAM) : LRESULT;
VAR CALLBACKPROCEDURE WndProc (hWnd:HWND; uMsg:UINT; wParam:WPARAM; lParam:LPARAM) : LRESULT;
LABEL L1;
(*static*)VAR hFile : HANDLE;
(*static*)VAR szTmpFile : ARRAY MAX_PATH+1 OF CHAR;
BEGIN
CASE uMsg OF
| WM_CREATE :
CHAR szTmpPath[MAX_PATH+1];
GetTempPath(MAX_PATH, szTmpPath);
GetTempFileName(szTmpPath, 'GEN', 0, szTmpFile);
hFile := CreateFile(szTmpFile, GENERIC_READ OR GENERIC_WRITE, 0, NIL, OPEN_ALWAYS, FILE_ATTRIBUTE_TEMPORARY, NIL);
GOTO L1; (* Warning: no break statement *)
END;
break;
…………………………….
| WM_DESTROY :
L1:
IF hFile # 0 THEN
CloseHandle(hFile);
DeleteFile(szTmpFile);
END;
PostQuitMessage(0);
(* BREAK *)
ELSE
WndProc := DefWindowProc(hWnd, uMsg, wParam, lParam);
RETURN;
END;
END;
WndProc := 0(*L*);
RETURN;
END WndProc;
END TmpFile.
Такую вставку можно сделать в модуль CommObxStreamsServer вместо создания окна сообщения. Программка должна создать новый временный файл и открыть его. Если файл был создан, тогда его удалить. Не суть, что в модуле используется функция(GetTempPath) поиска из системных переменных временных папок. Каталог можно указать в зависимости от задачи.