Out параметр в функции

-=Koba=-
Дата: 26.05.2011 15:40:53
Как работать с параметром типа Pointer в функции

function ExecDataProc(aPath: PChar; aXML: Pointer; aLength: LongInt;
  [b]out aResult: Pointer[/b]; aFlag: LongInt): LongInt; stdcall;
  external 'BasicEmulator.dll';

Ошибка
[DCC Error] uBank.pas(28): E2033 Types of actual and formal var parameters must be identical
FlyD
Дата: 26.05.2011 15:43:13
-=Koba=-
Как работать с параметром типа Pointer в функции
так же, как и с другими
-=Koba=-
Ошибка
[DCC Error] uBank.pas(28): E2033 Types of actual and formal var parameters must be identical
трудности с переводом?
Gwa
Дата: 26.05.2011 15:44:21
Покажите вызов..
-=Koba=-
Дата: 26.05.2011 15:45:59
FlyD
-=Koba=-
Как работать с параметром типа Pointer в функции
так же, как и с другими
-=Koba=-
Ошибка
[DCC Error] uBank.pas(28): E2033 Types of actual and formal var parameters must be identical
трудности с переводом?

Другие работают нормально


function CheckXML(aXML: PChar; out aResult: PChar): PChar;
var
  R1: LongInt;
  R2: LongInt;
  aLength: LongInt;
  XML: String;
  Res: String;
begin
  // ShowMessage('CheckXML');
  aLength := Length(aXML);
  SetLength(XML, aLength);
  XML:=String(aXML);

  R1 := ExecDataProc(':KB', @XML[1], aLength, @Res[1], 0);

  // ShowMessage(IntToStr(R1));
  // aResult:=PChar(Res);
  // ShowMessage(aResult);
  // aResult:=PChar(Res);
  // R2 := BasicDelBuf(@Res[1]);
  // ShowMessage(IntToStr(R2));
  // SetLength(XML, 10);
  // MoveMemory(@XML[1], @R1, 10);
  // Result := PChar(XML);
  Result := '-1';
end;
Gwa
Дата: 26.05.2011 15:50:32
попробуйте инициировать out строку, забейте в неё какое-нибудь количество пробелов..
-=Koba=-
Дата: 26.05.2011 15:52:38
Gwa
попробуйте инициировать out строку, забейте в неё какое-нибудь количество пробелов..

Нет ошибка таже самая
GunSmoker
Дата: 26.05.2011 15:53:35
Ничего, что out-параметр - это выходной параметр, а вы в него пытаетесь значение передать?

function CheckXML(aXML: PChar; out aResult: PChar): PChar;
var
  R1: LongInt;
  R2: LongInt;
  aLength: LongInt;
  XML: String;
  Res: Pointer;
begin
  // ShowMessage('CheckXML');
  aLength := Length(aXML);
  SetLength(XML, aLength);
  XML:=String(aXML);

  R1 := ExecDataProc(':KB', @XML[1], aLength, Res, 0);

  // ... в описании ExecDataProc должно быть написано, как работать с Res и как его освободить, когда он больше не нужен

  Result := '-1';
end;
FlyD
Дата: 26.05.2011 15:55:12
-=Koba=-
FlyD
так же, как и с другими

Другие работают нормально
то есть, если ты передашь Integer в строковый out параметр, то заработает?

function CheckXML(aXML: PChar; out aResult: PChar): PChar;
var
  R1: LongInt;
  R2: LongInt;
  aLength: LongInt;
  XML: String;
  Res: PChar;
begin
  // ShowMessage('CheckXML');
  aLength := Length(aXML);
  SetLength(XML, aLength);
  XML:=String(aXML);

  R1 := ExecDataProc(':KB', @XML[1], aLength, Pointer(Res), 0);

?
Gwa
Дата: 26.05.2011 15:57:03
а Вы не думаете, что это указатель на указатель?
Ведь описание
aXML: Pointer; и out aResult: Pointer; не одно и то же..
-=Koba=-
Дата: 26.05.2011 15:57:32
FlyD
-=Koba=-
пропущено...

Другие работают нормально
то есть, если ты передашь Integer в строковый out параметр, то заработает?

function CheckXML(aXML: PChar; out aResult: PChar): PChar;
var
  R1: LongInt;
  R2: LongInt;
  aLength: LongInt;
  XML: String;
  Res: PChar;
begin
  // ShowMessage('CheckXML');
  aLength := Length(aXML);
  SetLength(XML, aLength);
  XML:=String(aXML);

  R1 := ExecDataProc(':KB', @XML[1], aLength, Pointer(Res), 0);

?


Причем integer в строкоый, я имел ввиду заменить pointer на pchar скажем