C++创建调用DLL文件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++ 创建和调用动态链接库 DLL 文件(64 位)
操作系统:windows 所用编辑环境:VS2013 方法如下: 一、创建链接库文件 目标:vs2013 生成一个 64 位的.dll 文件 1 创建 win32 控制台程序空项目,设置时选择 DLL 选项
2 创建完成后,编写带吗,并设置 64 位。
代码: extern "C"_declspec(dllexport) int sum(int a, int b); int sum(int a, int b) {
return a + b; } 3 生成.dll 文Leabharlann Baidu,点击生成——>生成 DLL
在 X64 文件夹中看到 DLL 文件。 二、64 位程序调用 64 位 DLL,和普通控制台程序方法一样,多了一个设置成 64 位的步骤。 1 创建控制台程序。 2 编写代码,设置 64 位程序,方法同上面。
FreeLibrary(hdll);
}
3 右键项目 属性——>常规——>字符集设置为 “使用多字节字符集”
运行即可。
注: 1、在写 DLL 代码时: (1)extern "C":用 C 编译方式编译,目的是不重载。 (2)_declspec(dllexport):供外部调用 2、在写主函数时: (1)LoadLibrary():根据文件路径获取模块的句柄。 (2)(f)GetProcAddress():根据函数名获取函数指针(也是为何用 C 编译的原因)
代码如下: #include<iostream> #include<Windows.h>
typedef int(*f)(int , int); using namespace std; int main() {
f sum1; HINSTANCE hdll; hdll = LoadLibrary("E:\\研一\\项目\\testDLL\\x64\\Debug\\testDLL.dll"); if (hdll == NULL) {
FreeLibrary(hdll); cout << "失败" << endl; return 0; } sum1= (f)GetProcAddress(hdll, "sum"); if (sum1 == NULL) { FreeLibrary(hdll); return 0; } cout << sum1(1,2) << endl;
操作系统:windows 所用编辑环境:VS2013 方法如下: 一、创建链接库文件 目标:vs2013 生成一个 64 位的.dll 文件 1 创建 win32 控制台程序空项目,设置时选择 DLL 选项
2 创建完成后,编写带吗,并设置 64 位。
代码: extern "C"_declspec(dllexport) int sum(int a, int b); int sum(int a, int b) {
return a + b; } 3 生成.dll 文Leabharlann Baidu,点击生成——>生成 DLL
在 X64 文件夹中看到 DLL 文件。 二、64 位程序调用 64 位 DLL,和普通控制台程序方法一样,多了一个设置成 64 位的步骤。 1 创建控制台程序。 2 编写代码,设置 64 位程序,方法同上面。
FreeLibrary(hdll);
}
3 右键项目 属性——>常规——>字符集设置为 “使用多字节字符集”
运行即可。
注: 1、在写 DLL 代码时: (1)extern "C":用 C 编译方式编译,目的是不重载。 (2)_declspec(dllexport):供外部调用 2、在写主函数时: (1)LoadLibrary():根据文件路径获取模块的句柄。 (2)(f)GetProcAddress():根据函数名获取函数指针(也是为何用 C 编译的原因)
代码如下: #include<iostream> #include<Windows.h>
typedef int(*f)(int , int); using namespace std; int main() {
f sum1; HINSTANCE hdll; hdll = LoadLibrary("E:\\研一\\项目\\testDLL\\x64\\Debug\\testDLL.dll"); if (hdll == NULL) {
FreeLibrary(hdll); cout << "失败" << endl; return 0; } sum1= (f)GetProcAddress(hdll, "sum"); if (sum1 == NULL) { FreeLibrary(hdll); return 0; } cout << sum1(1,2) << endl;