Цитата:
Сообщение от 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 все таки как то по иному делает?
__________________
Програмист приходит на стрельбище. Стреляет. Прапор смотрит на мешень и говорит
Прапор: вы не попали ни один раз.
Программист: Пули вылетели, проблемы у вас.
|