Я использую этот небольшой пример кода из https://github.com/bblanchon/dllhelper
Я хочу знать, как бы я перехватил вызов функции до ее вызова? Так что я мог бы сначала вызвать свою собственную функцию, чтобы настроить некоторые вещи.
Мне нужен оператор внутри DllHelper, я не уверен, как это сделать.
спасибо
class ProcPtr {
public:
explicit ProcPtr(FARPROC ptr) : _ptr(ptr) {}
template <typename T, typename = std::enable_if_t<std::is_function_v<T>>>
operator T *() const {
return reinterpret_cast<T *>(_ptr);
}
private:
FARPROC _ptr;
};
class DllHelper {
public:
explicit DllHelper(LPCTSTR filename) : _module(LoadLibrary(filename)) {}
~DllHelper() { FreeLibrary(_module); }
ProcPtr operator[](LPCSTR proc_name) const {
return ProcPtr(GetProcAddress(_module, proc_name));
}
static HMODULE _parent_module;
private:
HMODULE _module;
};
class ShellApi {
DllHelper _dll{"Shell32.dll"};
public:
decltype(ShellAboutA) *shellAbout = _dll["ShellAboutA"];
};
int main() {
ShellApi shellApi;
shellApi.shellAbout(NULL, "hello", "world", NULL);
}
пытается что-то подобное
template<typename T, typename... Args, typename R = typename std::result_of<T(Args...)>::type>
R operator()(Args... args) {
MessageBoxA(NULL, "test", "test", MB_OK);
return R();
}