Форум: "Основная";
Текущий архив: 2013.09.22;
Скачать: [xml.tar.bz2];
ВнизКак правильно вызвать метод класса из CallBack функции Найти похожие ветки
← →
denkop (2011-08-26 17:47) [0]Есть такой код, задача которого в FResNames получить список имён ресурсов:
unit Unit1;
interface
uses Classes, Windows, SysUtils, ExtCtrls;
type
TResContainer = class
private
FResNames: TStringList;
procedure AddResName(ResName: string);
public
constructor Create;
destructor Destroy;
end;
implementation
function EnumResourceNamesCallback(hModule: HMODULE; lpType, lpName: PAnsiChar; lParam: Longint): BOOL; stdcall;
var
ResName: string;
begin
if (Cardinal(lpName) shr 16) = 0 then ResName:=IntToStr(Integer(lpName))
else ResName:=lpName;
// вот здесь как то нужно вызвать метод AddResName(ResName);
Result := True;
end;
constructor TResContainer.Create;
var
aResInstance: THandle;
begin
FResNames:=TStringList.Create;
aResInstance := FindResourceHInstance (HInstance);
if not EnumResourceNames(aResInstance, RT_RCDATA, @EnumResourceNamesCallback, 0) then
RaiseLastOSError;
FResNames.SaveToFile("d:\111.txt");
end;
destructor TResContainer.Destroy;
begin
FResNames.Free;
end;
procedure TResContainer.AddResName(ResName: string);
begin
FResNames.Add(ResName);
end;
end.
Проблема в том, как обратиться из callback функции к методу или свойству класса? Или по другому вопрос можно поставить, как передать в качестве callback функции метод класса?
← →
_Юрий (2011-08-26 17:53) [1]в EnumResourceNames последним параметром передать указатель на экземпляр
EnumResourceNames(aResInstance, RT_RCDATA,
@EnumResourceNamesCallback, Longint(self))
в калл-беке использовать
function EnumResourceNamesCallback(hModule: HMODULE; lpType, lpName: PAnsiChar; lParam: Longint): BOOL; stdcall;
var
ResName: string;
container: TResContainer;
begin
container := TResContainer(lParam);
← →
_Юрий (2011-08-26 18:02) [2]Также у вас в коде потенциальная проблема с деструктором:
destructor Destroy; override;
в противном случае ваш деструктор не будет вызван при освобождении объекта TResContainer методом Free, и вы получите утечку памяти
← →
denkop (2011-08-26 18:10) [3]Спасибо большое!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2013.09.22;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.002 c