[fpc-pascal] Better way to convert short string to pchar?

Marco van de Voort marcov at stack.nl
Fri Feb 23 12:51:43 CET 2018


In our previous episode, Ryan Joseph said:
> I would like short strings so I can do concatenation easily but I need to pass pchar to a C function. Is there anyway to do this on the stack instead of allocating a string each time? I feel like it was possible to do some type casting but I don?t remember how.
> 
> pname := StrAlloc(Length(name) + 1);
> StrPCopy(pname, name);
> result := glGetUniformLocation(programID, pname);
> StrDispose(pname);

When creating the content of name append #0 (name:=whateverexpression+#0 ); , then do
  result = glGetUniformLocation(programID, @name[1]);

Of course this reduces the maximum length of the shortstring by one. In
Paleo times I've seen TP frameworks that always allocated an extra char
field in records after the shortstring, so that a #0 could always be
appended, even if the string was max.

But the best way is to design out shortstrings.


More information about the fpc-pascal mailing list