вызов функции-оболочки шаблона - PullRequest
0 голосов
/ 09 апреля 2020

Я использую этот небольшой пример кода из 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();
}
...