您的位置:首页 > 编程语言 > C语言/C++

是否可以显式调用C++的动态链接库

2014-01-24 10:57 232 查看
测试了一下,是可以的,特殊情况下倒可以这样玩玩。

#include <stdio.h>

#include <dlfcn.h>

#include <stdlib.h>

int main(int agrc, char* argv[])

{

printf("1\n");

int (*pFunc)(void*, int, int);

void *pHandle = dlopen("libtwolib-first.so", RTLD_NOW);

if(pHandle == NULL)

{

printf("1.1\n");

}

printf("2\n");

void* obj = malloc(4); // 第一步:定义对象(分配内存,一定要分够哦)

void (*confunc)(void*) = (void (*)(void*))dlsym(pHandle, "_ZN4TestC1Ev"); // 第二步:取到构造函数

pFunc = (int (*)(void*,int,int))dlsym(pHandle, "_ZN4Test8first111Eii"); // 第三步:取到成员方法

confunc(obj); // 调用构造函数

printf("3\n");

int a = pFunc(obj,10, 11); // 调用成员方法

printf("4\n");

printf("%d\n", a);

dlclose(pHandle);

return 0;

}

这是被调用的类:

class Test

{

private:

int i;

public:

Test();

int first111(int x, int y);

};

总结:

这样干很麻烦的,虽然能行,但是实际操作很困难。

因为不管如何你都知道被调用类的接口,还不如自己重写被调用者的头文件和实现,只要能让调用者编译链接通过就行,然后隐式调用。

说了这么多主要是想解决想调用别人的动态库,但是别人的头文件又很复杂,一层一层的嵌套,想编译通过都难,并且想链接通过也难,因为有时依赖很多其他的动态库。

在取屏时,我就想用这种办法搞一下,看看好使不。

经测试,用这种办法取屏完全可以。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: