It is in the nature of the CGI and the ISAPI interface that both are different if you like to use own file buffers. CGI got it's data from environment QUERY_STRING or from STDIN. If you use environment you've to remember its size. By default environment size for Standard CGI calls is set to 8kB in the server configuration. If you read from STDIN you can read data into buffers to decrease memory needs of Perl but you cannot immediate control the server buffers.
The ISAPI interface supports better control of buffers. If you look at the above Delphi example you'll see that ReadClient function gives you the possibility to read either buffer size bytes or the ready bytes to read.