查看: 527|回复: 0

[C/C++] [DLL开发教程] 2.1引用DLL程序

[复制链接]

0

技术

9

魅力

1

原创

版主

禁止访问

Rank: 7Rank: 7Rank: 7

积分
7757
人气
176
分享
52

最佳新人活跃会员

发表于 2022-10-19 09:45:40 | 显示全部楼层 |阅读模式
【前言】
今天,我终于把RePlayMod装好了,真开心
不过,开心也不能忘了更新啊
【创建程序】
随便创建一个能在Windows运行的程序(以WinConsole为例)
上次,我们不是写了一个输出信息的函数吗,今天我们就来引用这个函数
【引用DLL】
我们可以使用以下预处理来导入DLL
[C++] 纯文本查看 复制代码
#pragma comment(lib,"testDll.lib")

注意,是引用lib文件。不是DLL文件
这是,有人就要说了:
啊这我知道,这是静态链接库
不是的,这个文件最终会跳转到testDll.dll上面
【引用函数】
引用函数的方法很简单,直接
[C++] 纯文本查看 复制代码
outPut("x64 forum");

额,报错了,找不到函数output()
为什么呢?
因为,编译器并不能直接读取testDll.dll中的内容,所以,我们还要声明一下这个函数
声明函数/类/数据的格式如下
[C++] 纯文本查看 复制代码
//数据
extern {type} {name};
//类
extern class {name};
//函数
extern {type} {name}({type});

在testDll中,我们需要这样声明outPut函数
[C++] 纯文本查看 复制代码
extern void outPut(const char *);

注意一点,这里并不需要写出参数列表乘的参数名,只用写出定义的类型
【附:完整源代码】
dll:
[C++] 纯文本查看 复制代码
// testDll.cpp : 定义 DLL 的导出函数。
//

#include "pch.h"
#include "framework.h"
#include "testDll.h"
#include <iostream>


// 这是导出变量的一个示例
TESTDLL_API int ntestDll=0;

// 这是导出函数的一个示例。
TESTDLL_API int fntestDll(void)
{
    return 0;
}

// 这是已导出类的构造函数。
CtestDll::CtestDll()
{
    return;
}

_declspec(dllexport) void outPut(const char *info) {
    printf(info);
}

exe:
[C++] 纯文本查看 复制代码
// testDll_test.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>

#pragma comment(lib,"testDll.lib")

extern void outPut(const char*);

int main()
{
    outPut("x64 forum");
}



本帖被以下淘专辑推荐:

小菜鸡一枚~
Gitee主页:https://gitee.com/juruoqwq
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表