Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.12.19;
Скачать: [xml.tar.bz2];

Вниз

c2pascal   Найти похожие ветки 

 
Vad1   (2003-12-08 14:36) [0]

Глубоковажаемые знатоки PASCAL
Есть описание С функции.
Как перевести это на PASCAL.
int c_function(int Number, char **ArgumentVector, FILE *Input, FILE *Output, FILE *Error)
(FILE из stdio.h)


 
PVOzerski   (2003-12-08 14:50) [1]

function c_function(Number:integer;var ArgumentVector:pChar;var Input,Output,Error:integer):integer;cdecl;


 
Vad1   (2003-12-08 15:11) [2]

Спасибо PVOzerski
Что передать в качестве FILE *Input, FILE *Output, FILE *Error ?
C-ая программа обычно передает stdin,stdout,stderr


 
PVOzerski   (2003-12-08 15:15) [3]

Если это Windows, есть WinAPI-функция GetStdHandle.


 
Vad1   (2003-12-08 15:25) [4]

Спасибо PVOzerski.
Я наверное ошибаюсь, но все таки:

FILE *Input
Input это указатель на стуктуру FILE(stdio),
а GetStdHandle(...) возвращает некий Handle,
правомерно-ли передавать его в функцию?


 
Vad1   (2003-12-08 15:25) [5]

Спасибо PVOzerski.
Я наверное ошибаюсь, но все таки:

FILE *Input
Input это указатель на стуктуру FILE(stdio),
а GetStdHandle(...) возвращает некий Handle,
правомерно-ли передавать его в функцию?


 
PVOzerski   (2003-12-08 15:56) [6]

2Vad1:
Похоже, что Вы правы больше меня...
Я посмотрел, как описан тип FILE в MinGW32 и BC5.5 - он выглядит там по-разному. Но вот код, который у меня милостиво согласился работать:
function fprintf(var f;s:pchar):longint;cdecl;
external "crtdll.dll";
function fopen(name,mode:pChar):pointer;cdecl;
external "crtdll.dll";
function fclose(var f):longint;cdecl;
external "crtdll.dll";
var
f:pointer;
begin
f:=fopen("1","w");
fprintf(f^,"!!!");
fclose(f^);
end.
Так что структуру эту сделать-таки можно средствами системных библиотек Windows (в данном случае - crtdll.dll, подойдет и msvcrt(xx).dll). Только си-шный код должен быть скомпилирован с ориентацией на использование этих же библиотек (VC или MinGW32). И еще покаюсь: все-таки структура - не integer, так что лучше так:

function c_function(Number:integer;var ArgumentVector:pChar;var Input,Output,Error):integer;cdecl;


 
PVOzerski   (2003-12-08 16:09) [7]

Продолжая изыскания:
в той же crtdll.dll имеется экспортируемый указатель на массив из 3 файлов под названием _iob. Правда, силами Delphi до него, пожалуй, не добраться. Но можно либо сделать враппер на Си, либо попробовать использовать FreePascal. Последнее сейчас и испытаю...


 
PVOzerski   (2003-12-08 16:18) [8]

Вот эта прога (FreePascal) вывела мне !!! на STDERR средствами crtdll.dll:

const
STDIN_FILENO=0;
STDOUT_FILENO=1;
STDERR_FILENO=2;
type
tCfile=packed record
_ptr:pointer;
_cnt:longint;
_base:pointer;
_flag,_file,_charbuf,_bufsiz:longint;
_tmpfname:pChar
end;
var
_iob:array[STDIN_FILENO..STDERR_FILENO]of tCfile;
external "crtdll.dll" name "_iob";
function fprintf(var f;s:pchar):longint;cdecl;
external "crtdll.dll";
function fopen(name,mode:pChar):pointer;cdecl;
external "crtdll.dll";
function fclose(var f):longint;cdecl;
external "crtdll.dll";
var
f:pointer;
begin
f:=@_iob[2];
// f:=fopen("1","w");
fprintf(f^,"!!!");
fclose(f^);
end.


 
Vad1   (2003-12-08 16:57) [9]

PVOzerski
Огромное Спасибо.
Буду пробовать.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.12.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.009 c
1-62019
avk
2003-12-06 18:10
2003.12.19
Округление цифр


14-62249
wHammer
2003-11-25 15:35
2003.12.19
Наверное глупый вопрос по ASM у...


1-62045
Black King
2003-12-05 22:14
2003.12.19
исходники прямой записи в файл XLS


14-62252
Nick-From
2003-11-24 19:18
2003.12.19
Интеллектуальный картридж HP (в защитном чехле)


3-61934
comwad
2003-11-27 06:57
2003.12.19
Как хранить в базе форматированный текст? XML?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский