Programação  
 
Conhecimento computador >> Programação >> C /C + + programação >> 
Funções dinâmicas de chamar DLLs
A biblioteca de vínculo dinâmico ou DLL, permite que um aplicativo para carregar apenas o código executável mínimo necessário para a memória em tempo de execução . Sempre que o programa chama uma função em uma DLL , o sistema operacional carrega a DLL na memória , de acordo com as especificações do programador . Enquanto o programa em execução não faz referência a uma função de DLL, essa DLL não precisa ocupar espaço. Isso economiza um monte de recursos e aumenta o desempenho em tempo de execução . Se a biblioteca eram estáticas , todo o código da biblioteca seria anexado ao código executável principal do programa eo programa gigante teria que ficar na memória para todo o tempo de execução. A versão do Unix ou Linux de uma DLL do Windows é uma biblioteca compartilhada , construída de acordo com a extensão ". Assim. " Windows , Unix e Linux têm convenções específicas para acessar as funções em DLLs ou bibliotecas compartilhadas . Exportação Windows DLL objetos usando dllexport Keyword

Para fazer uma função , classe, elemento de dados ou função membro da classe acessível para o programa de chamada Windows, você deve exportá-lo primeiro. Uma classe ou função pode ser exportado durante sua definição usando a palavra-chave " __declspec (dllexport) " antes da função , classe ou nome da variável, da seguinte forma:

void __ declspec ( dllexport) MyClass : CObjectName público { ..... }

No arquivo de cabeçalho DLL, colocar esta palavra-chave antes do nome da função em uma declaração protótipo. O " __declspec (dllexport) " palavra-chave armazena os nomes de função na tabela de exportação da DLL. Para economizar o espaço que ocupa esta tabela , utilize números ordinais em vez de nomes de função.
Export Windows DLL objetos através Module Definition

arquivos como uma alternativa para a palavra-chave " __declspec (dllexport) , " criar um arquivo de definição de módulo que indica o nome da biblioteca , descrição opcional e lista os nomes de funções , classes e variáveis ​​de dados na DLL juntamente com valores ordinais opcionais. O valor ordinal de uma função varia de 1 a N em que N é o número de funções na DLL . O arquivo de definição de módulo tem a extensão ". . DEF " A seguir é um exemplo de um arquivo de definição de módulo, ou um arquivo DEF : .

BIBLIOTECA ReportWriterDESCRIPTION Esta biblioteca contém a funcionalidade dinâmico gerador de relatórios de MyProduct.RPT_setup @ 1RPT_design @ @ 2RPT_run 3RPT_print @ 4

Se você criar uma Fundação DLL Classe Microsoft usando AppWizard do Visual Studio , o assistente irá gerar um esqueleto. def para a DLL e adicioná-lo ao projeto. Adicionar entradas para funções DLL no presente. Def para exportá-los . O formato do protótipo da função utilizada pelo programa de chamada deve coincidir com o formato das entradas de função no arquivo DEF . . Ou usar definições simples em ambos os lugares , ou , definições gerados pelo compilador específico do compilador em ambos os lugares de forma consistente.
Importação e Exportação de extensão DLLs

A Microsoft Foundation Class extensão DLL normalmente consiste de classes reutilizáveis ​​derivados de tipos de classes MFC existentes. Eles são construídos usando uma versão DLL do MFC, e pode ser chamado a partir de aplicativos e DLLs construídos usando esta versão compartilhada do MFC . Para exportar as classes em DLLs de extensão , use a macro " AFX_EXT_CLASS " antes do nome da classe como esta: Classe AFX_EXT_CLASS CMyViewClass : CView pública {//Classe corpo }; Se você estiver usando um arquivo DEF , adicione o seguinte código de macro no início . e no final do arquivo estendido cabeçalho DLL: # undef AFX_DATA # define AFX_DATA AFX_EXT_DATA // estendida # undef AFX_DATA # define AFX_DATA

Estas directivas de pré-processamento certifique-se de que as variáveis ​​do MFC e derivações e exportado da DLL estendida.
importando funções DLL

o outro lado da exportação de objetos a partir de DLLs é importá-los para aplicações usando o " __declspec (dllimport ) " palavra-chave.
Exportação C Funções para uso em C ou C + + executáveis ​​

Se o programa de chamada ou função é escrito em C + , use o +" C externo " directiva de pré-processamento no cabeçalho DLL se as funções DLL são escritos em C.

Aqui está um exemplo ://MyDLLFunctions.h # ifdef __ cplusplusExtern "C" {# endif__declspec ( dllImport) MyFunc01 void ( ); __declspec (dllimport ) MyFunc02 void ( ) ; # ifdef __ suportes cplusplus } //fim para " extern C " diretiva # endif

Como uma alternativa para especificar a diretiva " extern C " dentro do cabeçalho DLL , você pode incluir o arquivo de cabeçalho DLL com um C " externo" " " wrapper condicionalmente , como segue:

# ifdef __ cplusplusExtern "C" { # endif

# include " DLLPath \\ MyDLLFunctions.h "
suportes

# ifdef __ cplusplus } //fim para " extern C " diretiva # endif

Anterior :

Próximo : No
  Os artigos relacionados
·Por que não posso ver minha Xcode iPhone 
·Qual é a diferença entre um controle de entrada analó…
·O que significa isso , se um arquivo de aplicativo já …
·XCode : Como criar uma gota 
·Diferença entre fgetc e getc 
·Alternativas ao Boomerang Decompiler 
·Como fazer um arquivo VSH 
·Como fazer um aplicativo para o iPhone no Visual C 
·Um tutorial sobre Alertas iPhone SDK 
·Como usar arquivos de esqueleto em OGRE 
  Artigos em destaque
·Diferença entre fgetc e getc 
·Como importar códigos com SVN Xcode 3.2 
·Por que não posso ver minha Xcode iPhone 
·Como usar arquivos de esqueleto em OGRE 
·Como usar uma função GetOpenFileName 
·Funções Iomanip 
·Alternativas ao Boomerang Decompiler 
·Como fazer um aplicativo para o iPhone no Visual C 
·Um tutorial sobre Alertas iPhone SDK 
·Como fazer um arquivo VSH 
Cop e direita © Conhecimento computador http://ptcomputador.com Todos os Direitos Reservados