Код:
procedure TForm1.FormCreate(Sender: TObject);
var
Arr: Array [0..121] of AnsiChar;
MyPointer: PAnsiChar;
begin
MyPointer:=@Arr[1];
SomeFunction(0, PAnsiChar('qq'), MyPointer);
end;
Работает идентично моему коду.
Потом я переключился в WIN32 и теперь все время Access violation, а под 64 бит пол строки читает

DLL соответственно у меня есть x86 и x64
Что-то не то с памятью.
Код:
function SomeFunction(hFile: Integer; varName: PAnsiChar; var varLabel: Pointer): Integer; stdcall;
var
VarLabel: Pointer;
GetMem(MyPointer, 120);
SomeFunction(0, PAnsiChar('qq'), MyPointer);// на этой строке нормально
FreeMem(VarLabel, 120); // на этой падает
Такое впечатление, что функция портит память. При том что другие функции которые выделяют память самостоятельно работают отлично, например вот такая:
Код:
SPSSDIO_API int __stdcall spssGetVarNames(
const int hFile,
int* numVars,
char* * * varNames,
int* * varTypes);
function spssGetVarNames(hFile: Integer; var numVars: Integer;
var varNames: PPAnsiChar; var varTypes: PInteger): Integer; stdcall;
var
VarNames: PPAnsiChar;
spssGetVarNames(FileH, VariableCount, VarNames, VarArray);
У кого есть какие мысли?