Dynamic-Link Dados da Biblioteca

Uma DLL (Biblioteca de Dynamic-Link) pode conter dados globais ou dados locais.

{1>Escopo de variáveis<1}

Variáveis declaradas como globais em um arquivo de código-fonte DLL são tratadas como variáveis globais pelo compilador e pelo vinculador, mas cada processo que carrega uma determinada DLL obtém sua própria cópia das variáveis globais dessa DLL. O escopo de variáveis estáticas é limitado ao bloco no qual as variáveis estáticas são declaradas. Como resultado, cada processo tem sua própria instância das variáveis globais e estáticas da DLL por padrão.

Observação

Suas ferramentas de desenvolvimento podem permitir que você substitua o comportamento padrão. Por exemplo, o compilador do Visual C++ dá suporte a #pragma seção e o vinculador dá suporte à opção /SECTION. Para obter mais informações, consulte a documentação incluída nas ferramentas de desenvolvimento.

 

Alocação Memória Dinâmica

Quando uma DLL aloca memória usando qualquer uma das funções de alocação de memória (GlobalAlloc, LocalAlloc, HeapAlloc e VirtualAlloc), a memória é alocada no espaço de endereço virtual do processo de chamada e é acessível apenas para os threads desse processo.

Uma DLL pode usar o mapeamento de arquivo para alocar memória que pode ser compartilhada entre os processos. Para obter uma discussão geral sobre como usar o mapeamento de arquivos para criar memória compartilhada nomeada, consulte Mapeamento de Arquivos. Para obter um exemplo que usa a função DllMain para configurar a memória compartilhada usando o mapeamento de arquivo, consulte Usando Memória Compartilhada em uma Biblioteca Dynamic-Link.

Armazenamento local de thread

As funções TLS (armazenamento local de thread) permitem que uma DLL aloque um índice para armazenar e recuperar um valor diferente para cada thread de um processo multithreaded. Por exemplo, um aplicativo de planilha pode criar uma nova instância do mesmo thread sempre que o usuário abrir uma nova planilha. Uma DLL que fornece as funções para várias operações de planilha pode usar o TLS para salvar informações sobre o estado atual de cada planilha (linha, coluna e assim por diante). Para obter uma discussão geral sobre o armazenamento local do thread, consulte Thread Local Armazenamento. Para obter um exemplo que usa a função DllMain para configurar o armazenamento local do thread, consulte Usando o Thread Local Armazenamento em uma biblioteca de Dynamic-Link.

Windows Server 2003 e Windows XP: o compilador do Visual C++ dá suporte a uma sintaxe que permite declarar variáveis locais de thread: _declspec(thread). Se você usar essa sintaxe em uma DLL, não poderá carregar a DLL explicitamente usando LoadLibrary ou LoadLibraryEx em versões de Windows antes de Windows Vista. Se a DLL for carregada explicitamente, você deverá usar as funções de armazenamento local do thread em vez de _declspec(thread).