Главная страница
    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.01 c
14-49300
han_malign
2002-12-28 11:15
2003.01.16
---|Ветка была без названия|---


1-49108
TAN
2003-01-05 10:59
2003.01.16
Чтение из текстового файла.


14-49283
Дмитрий К.К.
2002-12-27 13:13
2003.01.16
Когда будет ДАВНО обещанный турнир по шахматам среди участников..


3-48885
ruslanyd
2002-12-19 22:35
2003.01.16
Обновление Lookup полей


14-49289
SMS
2002-12-24 15:16
2003.01.16
Пригласил вечером к себе девушку на работу





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский