Quando si scrive una DLL Win32 non gestita che esporta le funzioni, non è raro avere alcune funzioni, variabili e / o classi che non sono destinate ad essere esportate e sono solo per uso interno all'interno della DLL. Dal momento che stavamo progettando applicazioni scritte sia su .NET che su Visual FoxPro al momento, era il modo di utilizzare un file .def
invece della parola chiave __declspec(dllexport)
.
Quando scrivi componenti di questa natura in una DLL come faccio di solito è con un #define
che non si espande, ma mi aiuta a tenere traccia di quale sia lo scopo dietro al componente, cioè:
#define INTERNALUSE
// Function used internally by the DLL
VOID WINAPI INTERNALUSE StrDateToNumDate(wchar_t *wszDateString, int cchDate);
// Function exported by the DLL
BOOL WINAPI ValidateDateString(wchar_t *wszDateString, int cchDate);
Uno dei miei colleghi di questa azienda aveva commentato che questo era confuso e gonfiato nel codice quando ho scritto il componente e che, in genere, l'aspetto di una parola chiave aggiuntiva in una definizione di funzione in una DLL implica che il la funzione verrà esportata (a la #define PROJECTNAME __declspec(dllexport)
righe generate automaticamente da MSVC), ma ho trovato molto più semplice mantenere il mantenimento in questo modo.
Non ho pensato a questo problema per un po ', ma scavare attraverso il mio vecchio codice mi ha riportato alla mente solo ora. Sono curioso di sapere se qualcuno ha qualche idea su questo argomento e su chi di noi è più corretto.