Показать сообщение отдельно
  #4  
Старый 04.06.2014, 20:34
Specialistvlad Specialistvlad вне форума
Прохожий
 
Регистрация: 13.04.2012
Сообщения: 5
Репутация: 10
По умолчанию

Код:
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);


У кого есть какие мысли?
Ответить с цитированием