Обобщить можно лишь так: если API функция изменяет содержимое переданного ей буфера (в описании многих функций можно встретить предупреждение, что функция изменяет данные в буфере), то в такие функции нельзя передавать:
- PChar(<константа>), Pointer(<константа>)
- PChar(s) с 0-вой длиной строки. Но в зависимости от функции можно передавать Pointer(s), что не исключает предыдущего случая.
Пример:
MessageBox(0, PChar('Text'), PChar(''), 0); // В качестве заголовка пустая строка (адрес строки 0-вой длины, состоящей из одного символа #00)
MessageBox(0, PChar('Text'), nil, 0); // В качестве заголовка 0-вой адрес (нет никакой строки, даже пустой) - система проставит стандартный заголовок
MessageBox(0, PChar('Text'), nil, 0); // В качестве заголовка 0-вой адрес (нет никакой строки, даже пустой) - система проставит стандартный заголовок