是否可以显式调用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);
};
总结:
这样干很麻烦的,虽然能行,但是实际操作很困难。
因为不管如何你都知道被调用类的接口,还不如自己重写被调用者的头文件和实现,只要能让调用者编译链接通过就行,然后隐式调用。
说了这么多主要是想解决想调用别人的动态库,但是别人的头文件又很复杂,一层一层的嵌套,想编译通过都难,并且想链接通过也难,因为有时依赖很多其他的动态库。
在取屏时,我就想用这种办法搞一下,看看好使不。
经测试,用这种办法取屏完全可以。
#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);
};
总结:
这样干很麻烦的,虽然能行,但是实际操作很困难。
因为不管如何你都知道被调用类的接口,还不如自己重写被调用者的头文件和实现,只要能让调用者编译链接通过就行,然后隐式调用。
说了这么多主要是想解决想调用别人的动态库,但是别人的头文件又很复杂,一层一层的嵌套,想编译通过都难,并且想链接通过也难,因为有时依赖很多其他的动态库。
在取屏时,我就想用这种办法搞一下,看看好使不。
经测试,用这种办法取屏完全可以。
相关文章推荐
- C#调用C++动态链接库中的函数指针与函数指针结构
- C++ dll调用-动态(显式)
- 习语言可以实现动态链接库调用了
- 【C++】dll调用-动态(显式)
- 如何用c语言调用c++做成的动态链接库
- C#调用C++动态链接库之Win32dll(函数)、MFCdll(对话框)
- 简单 Demo:C++编写、调用动态链接库
- C中是否可以调用C++中的类
- 如何用c语言调用c++做成的动态链接库
- C# 中动态调用C++动态链接
- PHP中调用C/C++制作的动态链接库的教程
- C++调用Fortran程序----动态链接方式
- Windows 下java调用C++ dll动态链接库
- Java使用JNI调用C/C++的DLL动态链接库1
- Linux C语言调用C++动态链接库
- C++ dll调用-动态(显式)
- 如何用c语言调用c++做成的动态链接库
- VC与Matlab混合编程之调用动态链接库dll(C++)——<二>
- C# 中动态调用C++动态链接
- Linux C语言调用C++动态链接库