C++ Builder bez Form - zdarzenia

0

Mam problem, nie wiem jak przypisać własną funkcje obsługi zdarzenia w programie niewykorzystującym formy.

Oto źródło programu powodującego problem

//--------------< Plik Unit1.cpp >---------------------

#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ScktComp.hpp>
#include <vcl.h>
#include <windows.h>
#pragma hdrstop
#pragma argsused

void __fastcall MyListen(TObject *Sender, TCustomWinSocket *Socket);

WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
TServerSocket *MySock;
MySock = new TServerSocket(NULL);
MySock->OnListen=MyListen;

/*
Tu pojawia mi się problem, którego nie potrafię rozwiązać.

[C++ Error] Unit1.cpp(17): E2034 Cannot convert 'void (_fastcall *)(TObject *,TCustomWinSocket *)' to 'void (_fastcall * (_closure )(TObject *,TCustomWinSocket *))(TObject *,TCustomWinSocket *)'
*/

return 0;
}

void __fastcall MyListen(TObject *Sender, TCustomWinSocket *Socket)
{
//Zawartość funkcji
}

//-----------------------------------------------------

Za pomoc z góry dziękuje

Arek

0

Spróbuj tak. Może jeszcze konwencje wywołania w nagłówku metody trzeba będzie zmienic , ale nie sądzę...

MySock->OnListen=(void (_fastcall * (_closure )(TObject *,TCustomWinSocket *))(TObject *,TCustomWinSocket *))MyListen

// Rozwiązanie praktycznie miałes w komunikacie :)

//dopisane... Spróbuj w takim razie zadeklarować tą funkcję jako metodę, bo w tej chwili jest poza klasą, a wewnątrz może i jak widać występuje inna konwencja wywołań (_closure). Albo zadeklaruj takie wywołanie dla swojej funkcji.

0

Dzięki.
Kombinowałem, ale taki zapis chyba nie przejdzie. Musi być jakiś inny sposób.

0

sprawdz jaka funkcje generuje TServerSocket dla zdarzenia OnListen. parametry tej funkcji musza byc parametrami twojej funkcji.

0

lol

0

Procedura obsługi zdarzenia musi być metodą jakiejś klasy, nie może być funkcją globalną.

1 użytkowników online, w tym zalogowanych: 0, gości: 1