Witam. Zaczynam dopiero zabawę z c++. Napotkałem taki problem:
Potrzebuję zadeklarować wskaźnik na funkcje ... tyle, że w momencie gdy go deklaruję w programie nie wiem jeszcze jaki będzie prototyp tej funkcj (to są informacje pobierane od usera).
Oto schemat działania programu w uproszczeniu:
// PROGRAM POBIERA OD USERA NAZWE BIBLIOTEKI DLL ORAZ
// NAZWE FUNKCJI EXPORTOWANEJ PRZEZ TA BIBLIOTEKE.
// NASTEPNIE MIERZY CZAS JEJ WYKONANIA I WYSWIETLA
// WYNIK POMIARU:
//
// 01). - LADOWANIE BIBLIOTEKI KTOREJ NAZWA ZNAJDUJE SIE
// W POLU IDC_EDIT_LIBRARY.
// 02). - POBIERANIE ADRESU FUNKCJI KTOREJ NAZWA ZNAJDUJE SIE
// W POLU IDC_EDIT_FUNCTION.
// 03). - POBIERANIE TIMERAX (QueryPerformanceCounter).
// 04). - WYWOLANIE FUNKCJI KTOREJ ADRES ZOSTAL USTALONY
// W PUNKTACH. 01, 02.
// 05). - PONOWNY POMIAR CZASU (TIMERY).
// 06). - OBLICZANIE ROZNICY CZASU.
// 07). - WYSWIETLANIE CZASU WYKONANIA.
oto fragment kodu z problemem:
HMODULE lhmod = LoadLibrary(libname);
if (lhmod == NULL)
{
ShowError("NIE MOZNA ZALADOWAC PODANEJ BIBLIOTEKI");
break;
}
FARPROC lpfn = GetProcAddress(lhmod, fname);
if (lpfn == NULL)
{
ShowError ("NIE MOZNA UZYSKAC ADRESU \
WSKAZANEJ PROCEDURY");
break;
}
QueryPerformanceCounter(&tx);
(lpfn) ();
QueryPerformanceCounter(&ty);
W takim ukladzie dziala tylko dla funkcji bez argumentowej np. kernel32.dll\GetLastError
Niby przychodzi mi do głowy rozwiązanie - tyle, że wymagało by wstawki asemblera gdzie wrzucam argumenty na stos przed wywołaniem testowanej fukcji.
No tyle, że właśnie chciał bym to w c++ zrealizować. Da się to zrobić ?