设为首页 加入收藏

TOP

C和C++中动态链接库的创建和链接(原创,装载请注明原处)(二)
2019-01-15 18:08:49 】 浏览:206
Tags:动态 链接 建和 原创 装载 注明 原处
链接库-C方式)

1.创建DLL(动态链接库-C方式)

1.创建动态链接库项目,名称为Dll2
2.创建Dll2.h
输入如下代码

#pragma once
#ifdef MY_DLL_EXP
#else
#define MY_DLL_EXP _declspec(dllimport)////当编译时,头文件不参加编译,所以.cpp文件中先定义,后头文件被包含进来,因此外部使用时,为dllexport,而在内部编译时,则为dllimport

#endif
//导出函数Add
extern "C" MY_DLL_EXP double Add(double a, double b);

3.创建Dll2.cpp(如果有则不需要创建)
输入如下代码:

#include "stdafx.h"
#include "Dll2.h"
//注意以上两个头文件的相对顺序不能改变
#define MY_DLL_EXP _declspec(dllexport)

double Add(double a, double b) {
    return a + b;
}

4.生成即可。

2.链接DLL(动态链接库-C方式)

1.隐式链接

1.准备
Dll2.dll(解决方案Debug目录下)
Dll2.lib(解决方案Debug目录下)
2.创建测试项目testDll3
3.把Dll2.dll和Dll2.lib放入到testDll3项目目录下
4.创建testDll3.cpp
输入如下代码:

//隐式调用
#include <iostream>
#pragma comment(lib,"Dll2.lib")

using namespace std;
//载入函数,此处起到头文件的作用
extern "C" _declspec(dllimport) double Add(double a, double b);

int main() {
    cout << "Add(3,4)=" << Add(3, 4) << endl;
    cin.get();
    return 0;
}

5.生成并运行
运行结果:

2.显式链接

1.新建测试项目testDll4
2.把Dll2.dll放入新建的项目testDll4目录中
3.新建testDll4.cpp
创建dll过程中使用C编译器来编译函数,这样DLL文件中的函数名和原dll工程中的函数名就一致了。
墙裂推荐此种方式
输入如下代码:

//显示链接DLL-C
#include <Windows.h>//加载头文件
#include <iostream>

using namespace std;
//设置全局变量hInst用于存储dll句柄并加载动态链接库
HINSTANCE hInst = nullptr;
//声明函数指针
typedef double(*Add)(double a,double b);

int main() {
    //加载Dll2.dll
    hInst = LoadLibrary("Dll2.dll");
    if (hInst == nullptr) {
        cout << "动态链接库加载失败!!!" << endl;
        FreeLibrary(hInst);
        cin.get();
        return 0;
    }
    //加载函数
    Add add = (Add)GetProcAddress(hInst, "Add");
    cout << "Add(3,4)="<<add(3,4)<<endl;
    cin.get();
    FreeLibrary(hInst);
    return 0;
}

4.生成并运行。

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇cf97D. Robot in Basement(模拟 b.. 下一篇你这一辈子要用到的C数学函数都在..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目