首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何动态使用GetProcAddress

如何动态使用GetProcAddress
EN

Stack Overflow用户
提问于 2012-06-07 05:12:16
回答 1查看 3.7K关注 0票数 1

正如我们所知道的,我们可以使用GetProcAddress从DLL句柄获取函数指针,例如在DLL中定义的方法foo:

代码语言:javascript
复制
int foo(long)

对于foo函数,我们可以像这样获得函数指针:

代码语言:javascript
复制
typedef int(* FOO_FUNC)(long)
FOO_FUNC pFooFunc = (FOO_FUNC) GetProcAddress(dllHandle, "foo")

然而,我们正在考虑是否可以进一步使其动态化,比如说,我知道我有一个输入参数列表和它们的类型,这对于当前方法是正确的,我想在dll上调用这个方法,然后获得输出参数列表(以及它们的类型)。

代码语言:javascript
复制
//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++中实现上述callMethodDynamically?我能想到的唯一方法是,我们必须将参数推送到堆栈,然后调用pFunc。我猜它应该是汇编语言。这里还有别的路吗?我们还必须在这里处理不同的调用约定(stdcall,cdecl)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-23 00:09:22

为每个实数函数编写一个包装函数。

例如:

代码语言:javascript
复制
int addNumbers( int x, int y ) { return x + y; }

void addNumbersW( std::vector<VARIANT>& inArgs, std::vector<VARIANT>& outArgs )
{
    // decode in args somehow
    int x = getArg( inArgs, 0 );
    int y = getArg( inArgs, 1 );
    int r = addNumbers( x, y );
    addArg( outArgs, r );
}

您可能会为每个函数原型编写一系列包装器函数,并使用一些宏来简化使用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10922375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档