I need store a variant value (which always return a string) in a PChar variable now i’m using this code
procedure VariantToPChar(v:variant; p : PChar);
Var
s : String;
begin
s:=v;
GetMem(p,Length(s)*Sizeof(Char));
StrCopy(p, PChar(s));
end;
But i’m wondering if exist a better way
Update: You really shouldn’t do this or use this code as you’re likely to encourage people to write code that leaks. People will call this and fail to free the memory since they don’t know that this function allocates memory.
If you want to store something in a PChar size buffer, and have that value still be associated with p (the pointer p is modified and is different when you return from the procedure), then you need to make the parameter a
var(by-reference instead of by-value) parameter like this:I have also shown above handling EVariantError, which I have chosen to handle by returning nil in the p parameter, but you should think about how you want it to work, and then deal with it somehow.
The above code also leaks memory which is awful, so I renamed it AllocPChar. It seems like your original code has so many problems that I can’t recommend a good way to do what looks like a giant pile of bad things and the name you chose is among the most awful choices.
At least the name Alloc gives me a hint so I’m thinking “I better free this when I’m done with it”.