Показать сообщение отдельно
  #3  
Старый 25.12.2008, 16:37
dmdx dmdx вне форума
Начинающий
 
Регистрация: 24.05.2008
Адрес: Москва
Сообщения: 133
Репутация: 15
По умолчанию

Цитата:
Сообщение от lmikle
1. Печедача var параметра - фпктически это и есть передача по указателю. Только компилятор скрывает от тебя всю математику этого.

вот например два варианта.
вариант 1:
dll
Код:
library Lib1;
users SysUtils;

procedure Remark(pstr: pointer);stdcall;
var
 str : ^string;
begin
str := pstr;
str := str + 'String from DLL';
end;

{ или вот так 
procedure Remark(pstr: ^string);stdcall;
begin
^pstr := ^pstr + 'String from DLL';
end;

}

export Remark; name 'Remark';
проект
Код:
//подключаем 
procedure Remark(pstr: pointer);stdcall;external 'lib1.dll';
...
var
 sprog : string;
....
procedure TForm1.BtnClick(...);
begin
 s:= 'Program';
 ShowMessage(s);
 Remark(s);
 ShowMessage(s);
end;
прокатывает
вариант 2:
dll
Код:
library Lib1;
users SysUtils;

procedure Remark(var pstr: string);stdcall;
begin
str := str + 'String from DLL';
end;
export Remark; name 'Remark';
проект
Код:
//подключаем 
procedure Remark(var pstr: string);stdcall;external 'lib1.dll';
...
var
 sprog : string;
....
procedure TForm1.BtnClick(...);
begin
 s:= 'Program';
 Remark(s);
 ShowMessage(s);
end;
не катит.
получается что var все таки как то по иному делает?
__________________
Програмист приходит на стрельбище. Стреляет. Прапор смотрит на мешень и говорит
Прапор: вы не попали ни один раз.
Программист: Пули вылетели, проблемы у вас.
Ответить с цитированием