首先打开VS 2017,新建一个“动态链接库(DLL)”项目。
创建完之后,我们可以看见默认有这些文件:
这些我们暂时都不用管,保持原样就好。我们再创建一个.h和.cpp文件(这里我命名为dll.h和create_dll.cpp)
dll.h
#pragma once
// 创建DLL项目的时候,VS会默认添加一个“<你的项目名称>_EXPORTS”的预处理器头,
// 这样一来,添加了DLL_API标记的函数就会被导出,而对于一般的项目,就会看作
// 是导入的函数,方便使用。
#ifdef DLL1_EXPORTS
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif
#include
// 由于C++会重载函数等,所以为了将来能够顺利调用,必须指明采用C的方式
extern "C"
{
// 这个是随便写的一个判断素数的函数
DLL_API bool isPrime(std::uint64_t n);
}
create_dll.cpp
#include "pch.h"
#include "dll.h"
#include
#include
using namespace std;
void deleteK(vector& v, uint64_t k);
bool isPrime(uint64_t n)
{
uint64_t m = sqrt(n);
vector v;
for (uint64_t i = 2; i <= m; ++i)
{
v.push_back(i);
}
for (uint64_t i = 0; i < v.size(); ++i)
{
if (v[i] == 0)
{
continue;
}
if (n % v[i] == 0)
{
return false;
}
else
{
deleteK(v, v[i]);
}
}
return true;
}
void deleteK(vector& v, uint64_t k)
{
for (uint64_t i = k - 2; i < v.size(); i += k)
{
v[i] = 0;
}
}
编写完成后,我们编译项目,就会得到一个dll文件,这里我选择Release x64。
编译得到的dll文件采用stdcall调用约定(还有一种常见的是cdecl)。