In a project using a server.dll and a client.exe, I have dllexport
ed a server symbol from the server dll, and not dllimport
ed it into the client exe.
Still, the application links, and starts, without any problem. Is dllimport
not needed, then???
Details:
I have this 'server' dll:
// server.h
#ifdef SERVER_EXPORTS
#define SERVER_API __declspec(dllexport)
#else
#define SERVER_API // =====> not using dllimport!
#endif
class SERVER_API CServer {
static long s;
public:
CServer();
};
// server.cpp
CServer::CServer(){}
long CServer::s;
and this client executable:
#include <server.h>
int main() {
CServer s;
}
The server command line:
cl.exe /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL"
/D "SERVER_EXPORTS" /D "_UNICODE" /D "UNICODE" /D "_WINDLL"
/Gm /EHsc /RTC1 /MDd /Yu"stdafx.h"
/Fp"Debugserver.pch" /Fo"Debug\" /Fd"Debugvc80.pdb"
/W3 /nologo /c /Wp64 /ZI /TP /errorReport:prompt
cl.exe /OUT:"U:libsDebugserver.dll" /INCREMENTAL:NO /NOLOGO /DLL
/MANIFEST /MANIFESTFILE:"Debugserver.dll.intermediate.manifest"
/DEBUG /PDB:"u:libsDebugserver.pdb"
/SUBSYSTEM:WINDOWS /MACHINE:X86 /ERRORREPORT:PROMPT
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib
shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
Client command line:
cl.exe /Od /I "..server"
/D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE"
/Gm /EHsc /RTC1 /MDd /Fo"Debug\" /Fd"Debugvc80.pdb" /W3 /c /Wp64 /ZI /TP
.client.cpp
cl.exe /OUT:"U:libsDebugDebugclient.exe" /INCREMENTAL
/LIBPATH:"U:libsDebug"
/MANIFEST /MANIFESTFILE:"Debugclient.exe.intermediate.manifest"
/DEBUG /PDB:"u:libsdebugdebugclient.pdb"
/SUBSYSTEM:CONSOLE /MACHINE:X86
server.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
question from:
https://stackoverflow.com/questions/4489441/why-when-is-declspec-dllimport-not-needed 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…