Вътрешна информация за поддръжка на Microsoft
ГРЕШКА #: 101959 (Visual Studio)
Обобщена информация
Когато създавате DLL с помощта на 64-битова версия на Microsoft Visual C++ компилатор и свързване, можете да получите Linker кода на грешка LNK4197, ако функцията е обявен за експортиране повече от веднъж.
Симптоми
Свързване на изхода може да е подобно на следното:
C:\>link /NOLOGO /def:Sample.def /pdb:Sample.pdb /out:Sample.dll Sample.objSample.obj : warning LNK4197: export 'DllSample' specified multiple times; using first specification Creating library Sample.lib and object Sample.exp
Причина
Свързване на кода на грешка LNK4197 се генерира, когато функцията е обявен за експортиране повече от веднъж. Функция е обявено за експортиране в един от следните начини:
-
Функцията става чрез ключовата дума __declspec(dllexport) във файла C източник:
__declspec(dllexport) int DllSample() { return 42;}
-
Функцията става чрез модула дефиниции (. DEF) файл:
EXPORTS DllSample
Свързване на тази грешка може да възникне най-често при __declspec(dllexport) дума и. DEF файл се използват за дефиниране на същото име на функция. DLL проекта.
Решение
За да решите проблема, определят експортираните функции само веднъж, с помощта на __declspec(dllexport) ключови думи или чрез. DEF файл. Не използвайте следните два метода.
Статус
Това поведение е умишлено.
Повече информация
Обявяването функция за експортиране повече от един път не може да предизвика грешка свързване, описан в раздела "Симптоми" на тази статия в 32-битови версии на Microsoft Windows C++ компилатор и свързване. Обаче Microsoft препоръчва да определите функция износ само веднъж в 32-битови и 64-битовите версии на Windows C++ компилатор и свързване.