When you create a DLL, the linker automatically creates an import library for the DLL. It contains a list of all exported functions. You are using this import library in another project that uses a DLL.
Specific to COM servers is that these 4 exported functions always occur with GetProcAddress (), and you will never have an implied dependency on COM dlls. You always create COM objects with CoCreateInstance (), COM plumbing takes care of finding the DLL and using GetProcAddress () to find the DllGetClassObject () function. Same story for DllUn / RegisterServer found by Regsvr32.exe. And DllCanUnloadNow, found by COM plumbing. Therefore, you do not need an import library.
Using PRIVATE ensures that the function will not be exported to the import library. With all the private ones, you are not getting any import library at all. Nothing happens if you omit it, you just get an additional file from the linker that you will never use.
source share