【前言】
今天,我终于把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");
}
|