TL;DR: “with exports” means the project starts with some example exports added. You’ll need exports, so why not let it insert some boilerplate code for you? Less chance of typos. Use “dynamic-link library” instead of “dynamic-link library with exports” if you want to add ‘__declspec’ to things yourself.

So you want to create a DLL in Visual Studio. You’re vaguely aware of how a DLL works, but the options provided to you are still unclear:

Assuming you want a plain old DLL (that has existed for the last 25+ years), you’re going to want one of the top 2 options.

The major difference between them is, “with exports” adds some defines:

1
2
#define DLL1_API __declspec(dllexport)
#define DLL1_API __declspec(dllimport)

And it adds some example exports, so you can see how they work:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// This is an example of an exported variable
DLL1_API int nDll1=0;
 
// This is an example of an exported function.
DLL1_API int fnDll1(void)
{
    return 0;
}
 
// This is the constructor of a class that has been exported.
CDll1::CDll1()
{
    return;
}

In theory, you can compile this DLL and test it out immediately.