Udostępnij za pośrednictwem


Run-Time Library zachowanie

C/C++ kod run-time library wykonuje sekwencję uruchamiania biblioteki DLL, eliminując konieczność połączyć się z oddzielnych modułu jako było konieczne, Windows 3.x.Uwzględnione w C/C++, kod run-time library jest wywołana funkcja punkt wejścia DLL _DllMainCRTStartup._DllMainCRTStartup funkcja wykonuje kilka operacji, łącznie z wywołania _CRT_INIT, który inicjuje bibliotekę uruchomieniową C/C++ i wywołuje C++ konstruktory na zmienne statyczne, nielokalnego.Bez tej funkcji run-time library pozostałyby w stanie Niezainicjowany._CRT_INIT jest dostępna dla obu statycznie CRT lub łączenia CRT DLL Msvcr90.dll, od użytkownika DLL.

Mimo że można określić inną funkcję punktu wejścia przy użyciu /ENTRY: opcję, nie jest zalecane, ponieważ miałoby funkcji punktu wejścia do duplikowania wszystko, _DllMainCRTStartup jest.Konstruując biblioteki DLL w Visual C++, _DllMainCRTStartup jest połączony automatycznie i nie trzeba określać funkcji punktu wejścia przy użyciu /ENTRY: opcję.

Oprócz inicjowania biblioteki uruchomieniowej c _DllMainCRTStartup wywołuje funkcję o nazwie DllMain.W zależności od rodzaju buduje się biblioteki DLL, Visual C++ zawiera DllMain na i z tego pobiera powiązane tak, aby _DllMainCRTStartup zawsze ma coś do wywołania.W ten sposób Jeśli nie trzeba zainicjować biblioteki DLL nic specjalnego, wystarczy Konstruując biblioteki DLL.Jeśli trzeba zainicjować biblioteki DLL, gdzie dodać kod zależy od rodzaju DLL pisania.Aby uzyskać więcej informacji, zobacz Inicjowanie DLL.

Kod biblioteka uruchomieniowa C/C++ konstruktory i destruktory wzywa zmienne statyczne, nielokalnego.Na przykład w następujący kod źródłowy biblioteki DLL Equus i Sugar są dwie statyczne, nielokalnych obiektów klasy CHorse, określonych w Horses.h.Nie ma żadnej funkcji w kodzie źródłowym, które zawierają wywołania funkcji konstruktora dla CHorse lub destruktor działać, ponieważ obiekty te są zdefiniowana poza żadnych funkcji.Dlatego wywołania tych konstruktory i destruktory musi wykonać kod wykonywalny.Biblioteka uruchomieniowa kod aplikacji również wykonuje tę funkcję.

#include "horses.h"

CHorse  Equus( ARABIAN, MALE );
CHorse  Sugar( THOROUGHBRED, FEMALE );

BOOL    WINAPI   DllMain (HANDLE hInst, 
                            ULONG ul_reason_for_call,
                            LPVOID lpReserved)
...

Za każdym razem, nowy proces próbuje użyć biblioteki DLL, system operacyjny tworzy oddzielną kopię danych biblioteki DLL: jest to proces dołączyć.Kod biblioteki DLL wywołania konstruktorów dla wszystkich obiektów globalnych ewentualne, a następnie wywołuje DllMain funkcji z procesem Dołącz wybrane.Przeciwnej sytuacji jest proces odłączyć: run-time library wywołania kodu DllMain z procesem odłączanie zaznaczone, a następnie wywołuje listę funkcji rozwiązania, w tym atexit funkcje, destruktory dla obiektów globalnych i destruktory obiektów statycznych.Należy zauważyć, że kolejność zdarzeń podczas procesu dołączyć jest odłączyć na odwrocie tego procesu.

Kod run-time library jest również nazywany podczas Dołącz wątek i odłączyć wątku, ale nie kod wykonywalny, nie inicjowania lub zakończenie samodzielnie.

Co chcesz zrobić?

Zobacz też

Koncepcje

Biblioteki DLL w programie Visual C++