ID do artigo: 154093 - Última revisão: terça-feira, 21 de novembro de 2006 - Revisão: 3.3 Como chamar código de 32 bits do código de 16 bits no Windows 95, Windows 98 ou Windows Millennium Edition
Nesta páginaSumárioGeralmente é desejável para aplicativos Win16 de porta e DLLs Win32 um pouco em um tempo em vez de todas ao mesmo tempo. Por exemplo, convém porta DLLs de 16 bits para Win32, mas ainda poderá chamá-los do código de 16 bits. Este artigo descreve o mecanismo pelo qual DLLs de 16 bits podem chamar DLLs de 32 bits. O mecanismo é chamado de uma conversão e o método implementado no Microsoft Windows 95, Windows 98 ou Windows Millennium Edition (Me) é chamado de uma conversão simples. As três etapas principais escrever o código de conversão são:
Mais InformaçõesUma conversão simples consiste em uma DLL de 32 bits que funcionam juntos e 16 bits. A Chama de aplicativo Win16 a DLL de 16 bits e a DLL de 16 bits chama uma função exportada na DLL de 32 bits. Quando a função na DLL de 32 bits retorna, ele retorna para a DLL de 16 bits, que por sua vez retorna volta para o aplicativo Win16. Trabalho de DLLs 16 e 32 bits, chamando o Windows 95, Windows 98 ou kernels me 16 bits do Windows e de 32 bits para lidar com todos os os detalhes de baixo nível necessários para fazer a transição do código de 16 bits para 32 bits e de volta. Criar uma nova conversão simples envolve criar um script de conversão (.THK arquivo). Esse script é compilado com o compilador de conversão em um arquivo de linguagem assembly que é montado duas vezes; uma vez a cada um dos dois sinalizadores:-DIS_16 e - DIS_32. O resultado é um módulo de objeto de 32 bits e 16 bits. Esses módulos de objeto são vinculados às DLLs de 32 bits e 16 bits respectivamente. O diagrama a seguir resume os arquivos envolvidos na criação de DLLs:
+------------+
| 16to32.THK |
+------------+
|
+------------+
| 16to32.ASM |
+------------+
/ \
-DIS_16 / \ -DIS_32
/ \
+-----------+ +-----------+
| 16THK.OBJ | | 32THK.OBJ |
+-----------+ +-----------+
/ \
+-------+ +-------+ +-------+
| APP16 | -> | DLL16 | -- THUNK -- | DLL32 |
+-------+ +-------+ +-------+
Ferramentas necessárias para criar Thunks simples
Criar o Script ThunkVocê precisará criar um script que será usado pelo compilador conversão para criar uma conversão. Um script de conversão é um arquivo de texto que contém definições de tipo, protótipos de função das funções que você deseja chamar via thunks e uma especificação da direção dos parâmetros para cada função. Por exemplo, algumas funções requerem parâmetros de entrada e saídos enquanto outros podem exigir somente parâmetros de entrada. Conversão scripts usam sintaxe especial para descrever se parâmetros são entrados, saída, ou entrada e saída.Um script de conversão para 16-> 32 thunks começa com a instrução a seguir: enablemapdirect1632 = true; Por padrão, a DLL de 32 bits é carregada somente quando uma conversão para ele é executado pela primeira vez. Como essa ligação tardia é usada, o código de 16 bits deve depender não qualquer ação realizada pela inicialização da DLL de 32 bits. Porque a DLL de 32 bits será carregado somente quando o primeiro thunk para ele é executado, problemas ao carregar a DLL de 32 bits não serão detectados quando a DLL de 16 bits for carregado pela primeira vez. Para desativar a ligação tardia da DLL de 32 bits, adicione a seguinte linha no script conversão: preload32 = true; O compilador de conversão espera que o lado de 16 bits da conversão é declarado como __pascal __far e que o lado de 32 bits é __stdcall. (A declaração WINAPI cuida desse em ambos os lados.) O __cdecl e __fastcall convenções de chamada não são suportados pelo compilador conversão. No entanto, observe que o compilador de conversão não aceita, na verdade, as palavras-chave __far, __pascal ou __stdcall; eles são considerados. O script de conversão a seguir descreve uma função sem parâmetros: C language: void WINAPI MyThunk32(void); C++ Language: extern "C" void WINAPI MyThunk32(); O seguinte script de conversão usa tipos de parâmetro mais complexos, como estruturas. Este exemplo também mostra como especificar parâmetros de entrada e saídos: Usando o compilador ThunkO uso do compilador de conversão é da seguinte maneira:Thunk.exe/opções <outputfile> <inputfile> -o A linha a seguir mostra como compilar uma 16-> 32 script de conversão. Essa linha tem um script chamado 16to32.thk e produz um arquivo de linguagem assembly denominado 16to32.asm: conversão -t thk 16to32.thk -o 16to32.asm O "-t thk" opção informa o compilador de conversão para as funções de conversão no arquivo de linguagem assembly com "thk_" prefixo. Esse prefixo é usado ao vincular vários scripts de conversão em um par de DLLs e é útil para criar um par de DLLs que contêm ambas 16-> 32-> 16 thunks e 32. Criando a DLL de 16 bits
Criando a DLL de 32 bits
ReferênciasPara obter informações sobre como depurar thunks simples, consulte o seguinte artigo na Base de dados de Conhecimento da Microsoft: 133722
(http://support.microsoft.com/kb/133722/EN-US/
)
Como depurar Thunks simples A informação contida neste artigo aplica-se a:
Tradução automáticaIMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado. Clique aqui para ver a versão em Inglês deste artigo: 154093
(http://support.microsoft.com/kb/154093/en-us/
)
| Outros Recursos Outros Sites de Suporte
ComunidadesTraduções deste artigo |






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email



Voltar para o início