Также вы можете использовать встроенный ассемблер и сделать это:
я есть DLL, в которой у меня есть функция, которая возвращает pchar. (чтобы избежать необходимости использовать borlndmm) Первоначально я делал приведение строки как pchar и возвращал
Result := pChar(SomeFuncThatReturnsString)
Но в 90% случаев я получал ожидаемые результаты, а в остальное время ничего не получал.
Затем я подумал, что мне нужно выделить память для pchar, и что при моем первоначальном подходе у меня была точка pchar в памяти, которая не всегда была той, что была при первоначальном вызове функции. Так что теперь у меня есть это
Result := StrAlloc(128);
Strcopy(Result,PAnsiChar(Hash(Hash(Code,1,128),2,128)));
Но это оставляет мне необходимость очищать выделенную память на конце программы, с которой я делаю
StrDispose(Pstr);
Таким образом, вопрос за 64 доллара: нужно ли выделять память при возврате PChar из функции внутри DLL или я могу просто привести ее к PChar?