Главная страница
    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.008 c
3-61906
Siv Soft
2003-11-20 17:50
2003.12.19
IBClientDataSet - не загружает данные, не обновляет записи


1-62041
Мыш
2003-12-06 01:23
2003.12.19
красивый Drag


1-62064
Каспер
2003-12-09 10:27
2003.12.19
кто юзает TVirtualStringTree?


3-61944
gestern
2003-11-26 19:03
2003.12.19
insert


1-62025
FBI
2003-12-06 14:37
2003.12.19
OLE





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский