众所周知,我们可以使用 GetProcAddress 从 DLL 句柄中获取函数指针,例如在 DLL 中定义的方法 foo:
int foo(long)
我们可以像这样为 foo 函数获取函数指针:
typedef int(* FOO_FUNC)(long)
FOO_FUNC pFooFunc = (FOO_FUNC) GetProcAddress(dllHandle, "foo")
但是我们正在考虑是否可以进一步使其动态化,比如说,我知道我有一个输入参数列表及其类型,这对于当前方法是正确的,我想在 dll 上调用此方法,然后获取一个列表输出参数(以及它们的类型)
//VARIANT would be able to hold different type of data with different type
std::vector<VARIANT> inputArguments;
std::string methodName = "foo"
void * pFunc = GetProcAddress(dllHandle, methodName.c_str())
std::vector<VARIANT> outputArguments;
callMethodDynamically(pFunc, inputArgument, &outputArguments)
是否可以在 C/C++ 中动态实现上述 callMethod?我能想到的唯一方法是我们必须将参数推送到堆栈,然后调用 pFunc。我想那将是汇编语言。这里还有其他方法吗?我们还必须在这里处理不同的调用约定(stdcall、cdecl)。