Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите въехать в Callback (bcb5)

2.7K
28 ноября 2002 года
levait
1 / / 28.11.2002
Помогите пожалуйста темному пользователю.
Не въезжаю в правила видимости и порядок передачи
значений параметров в CALLBACK-функции и обратно.

Имеется API-библиотека, в которой есть пара функций:

DWORD CALLBACK YourStreamProc(
HSTREAM handle, // дескриптор потока
void *buffer,
DWORD length,
DWORD user );

HSTREAM WINAPI StreamCreate(
void *proc
DWORD user
); // возвращает дескриптор потока (typedef DWORD HSTREAM; )


Применяются они так:

FILE *file;
...
// запись в буфер из файла
DWORD CALLBACK MyStreamWriter(HSTREAM handle,void *buf,DWORD len,DWORD user) {
DWORD c=fread(buf,1,len,file); return c;
}
...
StreamCreate(&MyStreamWriter,0); // открыть поток, обрабатываемый
// callback-ом MyStreamWriter(…)

Как вписать это в болванку BCB5, чтобы параметры попали
в CALLBACK, и вообще, как оно(callback) работает?

//************** PROJECT1.CPP **************
#include <vcl.h>
#pragma hdrstop
USERES("Project1.res");
USEFORM("Unit1.cpp", Form1);

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}

//************** UNIT1.H *******************
#include <Classes.hpp> #include <Controls.hpp>
#include <StdCtrls.hpp>#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TLabel *Label1;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

//************* UNIT1.CPP ******************
#include <vcl.h>#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{ // Нажимаю кнопочку Button1

Label1->Caption="ЗАПУСК StreamCreate с CALLBACK-ом";

StreamCreate(&MyStreamWriter,0);

// А как в MyStreamWriter(…) попадают параметры типа
// указатель на буфер, его длина, указатель на файл?
// Когда (где) этот файл надо открывать/закрывать?
// Куда MyStreamWriter(…) возвращает значение?
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог