Cześć. Od paru dni piszę sobie w C++ własny plugin. Mam mały problem ze zrozumieniem pewnej rzeczy... Mianowicie mam klasę:
#include "_ASTHookData.h"
#define _ON TRUE
#define _OFF FALSE
template <class T>
class CInvoke
{
CHookData m_data;
public:
CInvoke(int, PFUNC = NULL, BOOL = _ON); // Create hook-info
operator T(); // Return detour pointer to func
};
template <class T>
CInvoke<T>::CInvoke(int addr, PFUNC detour, BOOL bOn)
{
// Define hook-info data
m_data.Detour = detour;
m_data.Pointer = (T)addr;
m_data.Original = (T)addr;
// Register data
if(detour && bOn)
CCallBack::Attach(m_data);
}
template <class T>
CInvoke<T>::operator T()
{
return (T&)m_data.Pointer;
}
CInvoke- Gratt stworzył ją by ułatwić sobie pisanie funkcji(chyba hookujących).
Przykład użycia wygląda tak:
CInvoke< void(__thiscall*)(void*,float)> pSetFarZSca (Adres,nazwa funckcji, zBool)
void __fastcall pSetFarZSca (zCSkyControlerOutdoor* _this, void*, float farg)
{
NazwaFunkcji(_this,farg);
}
I teraz pytanie: O co chodzi
Rozumiem tylko tą część: pSetFarZSca (Adres,nazwa funckcji, zBool)
Ale nie umiem zrozumieć tego: CInvoke< void(__thiscall*)(void*,float)> O co tutaj chodzi? __thiscall to chyba z IDA się wzięło, void to chyba typ funkcji lol, a float to argument. Ale Bardzo bym prosił o wyjaśnienie jeżeli ktoś by potrafił
Z góry dzięki.
P.S To jest z niepublikowanej wersji AST z numerkiem 003 XD