Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-49230
race1
2002-12-22 17:17
2003.01.16
rar


4-49357
GOD
2002-11-28 02:09
2003.01.16
Ярлык и как с ним бороться


7-49331
shahter
2002-11-04 09:17
2003.01.16
Доступ к папке


3-48846
Maks
2002-12-23 14:04
2003.01.16
Winwows


1-49020
Olgerd
2003-01-07 01:38
2003.01.16
Прозрачный TRadioButton





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский