在 C++ 上创建一个 __cdecl 到 __thiscall 的包装函数

Create a __cdecl to __thiscall wrapper function on c++

我需要使用 __cdecl 调用约定动态创建一个可以由外部库调用的函数,然后将调用重定向到 class 上的方法,有效地用作__thiscall 调用约定的代理。

主要思想是这个程序(program1)应该从外部应用程序(program2)接收一个函数指针,把它打包成一个object可以查询我们( program1) 以了解是否应该调用 program2,然后将其传递给库。

我对这样的 class 的 header 应该是什么样子有一个模糊的想法

template <typename F, class C>
class this_call_wrapper
{
public:
    // Creates a wrapper function that calls `operator()` on `object`
    // `operator()` should take the same arguments as `F`
    this_call_wrapper(const C* object);
    // Deallocates memory used by this and the wrapper
    ~this_call_wrapper();
    // Returns the pointer to the function wrapper
    F* get_wrapper();
private:
    C* object;
    F* wrapper;
};

是否有提供类似功能的库?如果没有,我如何在 C++ 中实现它?

我发现 libffcall to be the most appropriate solution for these kind of problems. Constructing closures on assembly/machine code is also a valid option, but with how easy and portable it is to implement the same thing using libffcall,我不认为你想弄乱前者,除非你对你的二进制文件有某种(非常严格的)大小限制。

This is the final solution.