dll Export-HeaderEine Warnung mit dem Bau 64-Bit-DLL
extern "C"
void _declspec(dllexport) __stdcall foo();
DEF-Datei
EXPORTS
foo @1
Wenn ich die dll von 64-Bit-Build-Konfiguration aufbauen, treffe ich diese Warnung.
Warnung LNK4197: export 'foo' mehrmals angegeben; unter Verwendung der ersten Spezifikation
Aber wenn ich die DLL durch 32bit Build-Konfiguration erstellen, tritt die Warnung nie auf.
Was ist das Problem? Was ist der Unterschied.
In DLL-Header für Interface verwenden wir in der Regel diese Technik,
#ifdef EXPORT_DLL
#define BASICAPI _declspec(dllexport)
#else
#define BASICAPI _declspec(dllimport)
#endif //_EXPORT_DLL
Aber wenn def Datei auch vorhanden ist, werden wir immer die Warnung treffen, wenn wir 64-Bit-DLL bauen.
Also, sollten wir die Codes so schreiben?
#ifdef EXPORT_DLL
#define BASICAPI
#else
#define BASICAPI _declspec(dllimport)
#endif //_EXPORT_DLL
Es funktioniert gut. Aber es ist mir nicht bekannt.
Geben Sie mir Ihre Meinung.
'64-Bit-Compiler schmückt nicht Namen 'Ich wusste das nicht. Das war der Grund! Vielen Dank. – Benjamin
Übrigens, wie kann ich Kursivschrift im Kommentarfeld verwenden. – Benjamin
Es * schmückt * Namen, es schmückt sie nur anders als der 32-Bit-Compiler (d. H. Ohne den führenden Unterstrich). Sie können eine Funktion zweimal mit verschiedenen Namen exportieren (das ist, was ich in Ihren 32-Bit-Builds erwarte). Die Warnung liegt darin, dass bei 64-Bit-Builds sowohl die '__declspec'- als auch die .def-Datei zu dem * selben * Ergebnis führen würden. exportierter Name - einer von ihnen gilt als redundant. –