【转】dll调用
来源:互联网 发布:朋友圈编辑软件 编辑:程序博客网 时间:2024/06/06 12:48
DLL(动态连接库),然而可以分为动态调用于静态调用。下面我分别举一个例子说说。
1)动态调用:
首先:在VC++6.0中创建 Win32 Dynamic-link library工程创建一个动态连接库工程:
在头文件TestDll.h中写下代码
extern "C" int __declspec(dllexport) add(int numa, int numb);
在源文件TestDll.cpp中实现改函数:
int __declspec(dllexport) add(int numa, int numb)
{
return numa + numb;
}
其次,创建一个测试程序,TestDemo,创建一个.cpp文件,然后放下代码:
HINSTANCE hinstance;
typedef int (*lpAdd)(int a, int b);
lpAdd lpadd;
int main()
{
hinstance = LoadLibrary("E:\\vc\\DLL\\TestDll\\Debug\\TestDll.dll");
lpadd = (lpAdd)GetProcAddress(hinstance, "add");
cout << "2 + 3 = " << lpadd(2, 3) << endl;
FreeLibrary(hinstance);
return 0;
}
而应用程序对本DLL的调用和对第2节静态链接库的调用却有较大差异,下面我们来逐一分析。
首先,语句typedef int ( * lpAddFun)(int,int)定义了一个与add函数接受参数类型和返回值均相同的函数指针类型。随后,在main函数中定义了lpAddFun的实例addFun;
其次,在函数main中定义了一个DLL HINSTANCE句柄实例hDll,通过Win32 Api函数LoadLibrary动态加载了DLL模块并将DLL模块句柄赋给了hDll;
再次,在函数main中通过Win32 Api函数GetProcAddress得到了所加载DLL模块中函数add的地址并赋给了addFun。经由函数指针addFun进行了对DLL中add函数的调用;
最后,应用工程使用完DLL后,在函数main中通过Win32 Api函数FreeLibrary释放了已经加载的DLL模块。
通过这个简单的例子,我们获知DLL定义和调用的一般概念:
(1)DLL中需以某种特定的方式声明导出函数(或变量、类);
(2)应用工程需以某种特定的方式调用DLL的导出函数(或变量、类)。
2)静态连接:
代码如下:
#include <iostream>
using namespace std;
#pragma comment(lib,"Testlib.lib")
//.lib文件中仅仅是关于其对应DLL文件中函数的重定位信息
extern "C" __declspec(dllimport) add(int x,int y);
int main()
{
int result = add(2,3);
cout << result << endl;
return 0;
}
FROM:http://www.cppblog.com/amyvmiwei/archive/2008/01/02/40202.html
详细信息参见:http://support.microsoft.com/kb/815065/zh-cn
http://dev.yesky.com/283/2640283.shtml
- [转] c#调用dll
- 【转】dll调用
- 【转】Java如何调用DLL
- dll调用
- 调用DLL
- 调用DLL
- DLL调用
- DLL调用
- dll调用
- 调用DLL
- 调用dll
- 调用dll
- DLL调用
- dll调用
- Dll调用
- .dll调用
- 释放DLL 调用DLL
- 转:LoadRunner下DLL的调用
- IIS安装注意点与Apache Tomcat的安装
- node.js 文件操作
- Eclipse的安装与设置
- 动态贝叶斯网络DBN
- ASP连接数据库
- 【转】dll调用
- eclipse快捷键
- OpenOffice3.4.1源码编译和安装
- java里抽象类和接口的区别
- string和stringbuffer区别
- java中的文件输入输出
- Python变量与语句(一)
- Python函数与模块(二)
- weka的重新编译与添加算法