Форум: "Основная";
Текущий архив: 2003.01.16;
Скачать: [xml.tar.bz2];
ВнизМожно ли делать чтото вроде етого: Найти похожие ветки
← →
drin (2003-01-07 19:09) [0]По крайней мере у меня не получается
uses
Windows, SysUtils;
Type
PProc = ^TProc;
TProc = function(param1, param2: integer): integer; StdCall;
TType = class
public
constructor Create;
function FProc(param1, param2: integer): integer; StdCall;
end;
Var
VType: TType;
Proc: PProc;
Res: integer;
function TType.FProc(param1, param2: integer): integer; StdCall;
begin
MessageBox(0, PChar(inttostr(param1)), PChar(inttostr(param2)), MB_OK);
result:=3;
end;
constructor TType.Create;
begin
Proc:=@TType.FProc;
end;
begin
VType:=TType.Create;
if Proc <> nil then
Res:=TProc(Proc)(1, 2);
MessageBox(0, PChar(inttostr(Res)), PChar(inttostr(Res)), MB_OK);
end.
В ф-ии TType.FProc param1 окзывается правильным, а вот param2 нет, результат ф-ии тоже правилен но при выводе его возникает Exception. Я знаю что зделано абсолютно некорректно, потому и спрашиваю.
← →
TTCustomDelphiMaster (2003-01-07 19:32) [1]А что собственно вы хотели сделать.
← →
Rouse_ (2003-01-07 19:54) [2]Я многое конечно видел, но такое :))
Действительно зачем делать класс и после этого в его конструкторе писать
Proc:=@TType.FProc;
Proc то глобальна. Странно все это.
Для чего спрашивается извращаться если можно заместо
Res:=TProc(Proc)(1, 2);
Сделать
Res := VType.FProc(1,2);
Ну короче, эксперимент в принципе прикольный, спасибо, посмеялся :))
Желаю успехов
ЗЫ: не принимайте это близко к сердцу :))
← →
drin (2003-01-07 20:09) [3]Ну например есть у нас Dll"ка, в ней процедура аргумент которой указатель на функцию типа ТProc,её нужно связывать с каждым объектом данного класса:
uses
Windows, SysUtils;
Type
PProc = ^TProc;
TProc = function(param1, param2: integer): integer; StdCall;
TType = class
public
constructor Create;
function FProc(param1, param2: integer): integer; StdCall;
end;
Var
VType: TType;
procedure DllProc(AProc: PProc);
external "MyLib.dll";
function TType.FProc(param1, param2: integer): integer; StdCall;
begin
MessageBox(0, PChar(inttostr(param1)), PChar(inttostr(param2)), MB_OK);
result:=3;
end;
constructor TType.Create;
begin
DllProc(@TType.FProc);
end;
begin
VType:=TType.Create;
end.
← →
TTCustomDelphiMaster (2003-01-07 20:48) [4]Во первых передача метода класса TType.FProc ничего не даст. Вы не сможете его правильно вызвать, т.к. вызов метода класса и обычной процеруры реализованы по разному(При вызове метода неявно передается указатель на объект, которому пренадлежит метод). Из за этого и возникает ошибка.
Во вторых если вам нужно работать с объектом в Dll то почему бы его там и не создать.
И в третих если вы все таки хотите работать с объектом из Dll то передавайте указатель на него. Но и в этом случае не все просто. Пример можно посмотреть на королевстве Дельфи в разделе Hello World.
Ну и в четвертых кроме Dll есть Bpl.
Желаю успехов
← →
icWasya (2003-01-08 09:21) [5]может быть надо
Type
PProc = ^TProc;
TProc = function(param1, param2: integer): integer of object; StdCall;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.01.16;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c