Informacje wewnętrzne pomocy technicznej firmy Microsoft
Nr błędu: 101959 (Visual Studio)
Podsumowanie
Podczas tworzenia biblioteki DLL przy użyciu 64-bitowej wersji programu Microsoft Visual C++ kompilator i łączenie, może zostać wyświetlony Linker numer błędu LNK4197, jeśli funkcja została zadeklarowana na wywóz więcej niż jeden raz.
Symptomy
Program łączący dane wyjściowe mogą być podobne do następujących:
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
Przyczyna
Program łączący numer błędu LNK4197 jest generowany, gdy funkcja została zadeklarowana na wywóz więcej niż jeden raz. Funkcja jest zadeklarowana na wywóz w jednym z następujących sposobów:
-
Funkcja jest zadeklarowana za pomocą słowa kluczowego __declspec(dllexport) w pliku źródłowego C:
__declspec(dllexport) int DllSample() { return 42;}
-
Funkcja jest zadeklarowana za pomocą definicji modułów (. Plik DEF):
EXPORTS DllSample
Najczęściej występuje ten błąd łączenie po słowie kluczowym __declspec(dllexport) i. Plik DEF są używane do definiowania tej samej nazwie funkcji w. Projekt biblioteki DLL.
Rozwiązanie
Aby rozwiązać ten problem, zdefiniować eksportowanych funkcji tylko jeden raz, przy użyciu słowa kluczowego __declspec(dllexport) lub za pomocą. Plik DEF. Nie należy używać obu tych metod.
Stan
To zachowanie jest zgodne z projektem.
Więcej informacji
Deklarowanie funkcji na wywóz więcej niż jeden raz mogą nie dawać błędu program łączący, który jest opisany w sekcji "Symptomy" tego artykułu w 32-bitowych wersjach systemu Microsoft Windows C++ kompilator i łączenie. Firma Microsoft zaleca jednak zdefiniować funkcję wywozu tylko jeden raz w zarówno 32-bitowe i 64-bitowych wersjach systemu Windows C++ kompilator i łączenie.