Recent

Author Topic: FPC 3.2.2 - C stdin, stdout and stderr could not be imported.  (Read 727 times)

paule32

  • Hero Member
  • *****
  • Posts: 645
  • One in all. But, not all in one.
FPC 3.2.2 - C stdin, stdout and stderr could not be imported.
« on: October 30, 2024, 04:11:21 pm »
i have the following code:

Code: Pascal  [Select][+][-]
  1. var
  2.     __stdin : Pointer; cdecl; external 'msvcrt.dll' name 'stdin' ;

and I get the following error message:
Code: Text  [Select][+][-]
  1. Fatal: Syntax error, ":" expected but ";" found
MS-IIS - Internet Information Server, Apache, PHP/HTML/CSS, MinGW-32/64 MSys2 GNU C/C++ 13 (-stdc++20), FPC 3.2.2
A Friend in need, is a Friend indeed.

Thaddy

  • Hero Member
  • *****
  • Posts: 18321
  • Here stood a man who saw the Elbe and jumped it.
Re: FPC 3.2.2 - C stdin, stdout and stderr could not be imported.
« Reply #1 on: October 30, 2024, 04:22:26 pm »
You wrote the code the other way around and more specific stdin already exists in freepascal as an alias for input.

try this:
Code: Pascal  [Select][+][-]
  1. var
  2.     mystdin : Pointer; external 'msvcrt.dll' name '__stdin' ;
And stdin is a textfile, and in C a handle, not a pointer, even my code won't work but puts you on the right track.
Pointers also do not need a calling convention. Also mind trailing spaces...
Btw, why would you need stdin from msvcrt? that does not make any sense at all. It is in system and part of any pascal program.
(btw, I can detect the use of AI, I smell it..., tell me I am wrong)
« Last Edit: October 30, 2024, 04:41:33 pm by Thaddy »
Due to censorship, I changed this to "Nelly the Elephant". Keeps the message clear.

MarkMLl

  • Hero Member
  • *****
  • Posts: 8504
Re: FPC 3.2.2 - C stdin, stdout and stderr could not be imported.
« Reply #2 on: October 30, 2024, 04:42:44 pm »
You wrote the code the other way around and more specific stdin already exists in freepascal as an alias for input.

There are two separate things here: System.StdIn as a documented alias for Input (i.e. semi-magical as a program parameter), and the well-known handles stdin etc. which have special meaning in the context of many OSes.

I would presume that in the case of msvcrt it's a (function returning a?) numeric constant, but this is somewhere where one has to be very cautious.

MarkMLl
MT+86 & Turbo Pascal v1 on CCP/M-86, multitasking with LAN & graphics in 128Kb.
Logitech, TopSpeed & FTL Modula-2 on bare metal (Z80, '286 protected mode).
Pet hate: people who boast about the size and sophistication of their computer.
GitHub repositories: https://github.com/MarkMLl?tab=repositories

paule32

  • Hero Member
  • *****
  • Posts: 645
  • One in all. But, not all in one.
Re: FPC 3.2.2 - C stdin, stdout and stderr could not be imported.
« Reply #3 on: October 30, 2024, 04:43:12 pm »
Hi Thaddy,

yes, you right - from msvcrt.dll
I use some C-Functions in an Application that need the **stdin** for **fgets** and others.

Edit:

@MarkMLI  ;D
under Windows, you are faced with STD_INPUT_HANDLE from the win32API and the C-Functions like fgets or fopen - which comes from historically reason.
Because Microsoft does write the OS with C (I guess).

And as such, you have two Versions for low-level C-Function's, and the high-level API functions.
Last but not least: the calling convention's stdcall (Pascal), and cdecl for C/C++.
« Last Edit: October 30, 2024, 04:50:38 pm by paule32 »
MS-IIS - Internet Information Server, Apache, PHP/HTML/CSS, MinGW-32/64 MSys2 GNU C/C++ 13 (-stdc++20), FPC 3.2.2
A Friend in need, is a Friend indeed.

Thaddy

  • Hero Member
  • *****
  • Posts: 18321
  • Here stood a man who saw the Elbe and jumped it.
Re: FPC 3.2.2 - C stdin, stdout and stderr could not be imported.
« Reply #4 on: October 30, 2024, 05:06:38 pm »
fgets and family work happily with fpc's stdin.
Due to censorship, I changed this to "Nelly the Elephant". Keeps the message clear.

 

TinyPortal © 2005-2018