Udostępnij za pośrednictwem


Importowanie plików DEF

Jeśli wybrano używanie __declspec(dllimport) wraz z pliku .def, należy zmienić pliku .def wykorzystanie danych, zamiast stałej, aby zmniejszyć prawdopodobieństwo, że nieprawidłowe kodowanie, spowoduje problem:

// project.def
LIBRARY project
EXPORTS
   ulDataInDll   DATA

W poniższej tabeli przedstawiono dlaczego.

Słowo kluczowe

Emituje w bibliotece importu

Wywóz

CONSTANT

_imp_ulDataInDll_ulDataInDll

_ulDataInDll

DATA

_imp_ulDataInDll

_ulDataInDll

Za pomocą __declspec(dllimport) i stałej listy zarówno imp wersji i bez nazwy w .lib biblioteki DLL Importowanie biblioteki, utworzonej w celu umożliwienia jawnego łączenia.Za pomocą __declspec(dllimport) i wykazy danych tylko na imp wersji nazwy.

Użycie stałej, albo następujące konstrukcje kodu może służyć do dostępu ulDataInDll:

__declspec(dllimport) ULONG ulDataInDll; /*prototype*/
if (ulDataInDll == 0L)   /*sample code fragment*/

- lub -

ULONG *ulDataInDll;      /*prototype*/
if (*ulDataInDll == 0L)  /*sample code fragment*/

Jednak użycie danych w pliku .def, tylko kod skompilowany z następującej definicji można uzyskać dostęp zmiennej ulDataInDll:

__declspec(dllimport) ULONG ulDataInDll;

if (ulDataInDll == 0L)   /*sample code fragment*/

Używając stałej jest bardziej ryzykowne, ponieważ Jeżeli zapomnisz dodatkowy poziom pośrednia, mógłby potencjalnie dostęp tabele adresów importu wskaźnik do zmiennej — nie zmiennej.Ten typ problemu często może objawiać jako naruszenie zasad dostępu, ponieważ tabele adresów importu jest obecnie tylko do odczytu przez kompilator i program łączący.

Bieżący program Visual C++ łączący odpowiednie ostrzeżenie, jeśli STAŁA w pliku .def dla tej sprawy.Tylko ważny powód, aby użyć stałej jest, jeśli nie można ponownie skompilować niektóre obiektu pliku, gdzie nie wykaz did pliku nagłówka __declspec(dllimport) na prototypu.

Zobacz też

Koncepcje

Importowanie do aplikacji