动态调用DLL C ++

时间:2015-08-06 04:18:16

标签: c++ dll

我必须在c ++中创建一个DLL时间测试程序,它可以加载DLL并尝试其功能,测试是否给出正确的结果并检查运行它们所需的时间。 所以这意味着我将在执行程序期间收到一个DLL或不同的DLL,加载它们并调用它们的函数,而不知道函数有多少个参数(在编译程序之前)。

所以我理解我无法通过GetProcAddress声明指向函数的指针,除非我动态地声明(我不知道我是否可以在c ++中这样做)。 既没有动态地包含DLL的标头。

我能找到的唯一解决方案是我的程序生成一个新的c或c ++文件,其中包含调用DLL函数,编译,启动它所需的所有内容......

你能给我一些意见,想法吗?也许有一种方法可以用C ++来做到这一点,而且我正在跳过它。

我使用C ++,代码块13.12和MinWG 4.8。

1 个答案:

答案 0 :(得分:2)

此问题有两种基本解决方案。

1)即时填写所有可能的功能,然后在调用功能时,您可以选择正确的模板并填写详细信息。

2)即时生成代码。

1)并不像听起来那么困难,因为有大量功能相同的功能。两个函数可以满足所有0参数函数(stdcall + cdecl)。 2个函数用于一个参数调用,依此类推。正确的数据(例如指针和大小)被别名变为pointer1,pointer2,然后传递给泛型函数void * Func1_2params(void *,void *); - 这可能符合void func1(char,char);,int strtok(char *,char *);,...的调用约定,因为每个参数元素的槽(reg / stack)是"指针大小& #34;

2)有一个库ffi(外来表单接口) - 它将脚本语言绑定到C / C ++,它可以用来动态构建代码以创建正确的接口,这不是很直接,但是可以让这个工作。最后一些脚本语言有直接调用(java,luajit)。将luajit嵌入代码中相对容易,并使用少量的lua来构建一个来自" lua view"一个函数的本机,然后调用DLL。