Artigo: 154093 - Última revisão: terça-feira, 21 de Novembro de 2006 - Revisão: 3.3 Como chamar o código de 32 bits do código de 16 bits no Windows 95, Windows 98 ou Windows Millennium Edition
Nesta páginaSumárioMuitas vezes é desejável a porta Win16 aplicações e dll para Win32 um pouco cada vez e não ao mesmo tempo. Por exemplo, convém porta dll de 16 bits para Win32 mas ainda conseguir chamá-los do código de 16 bits. Este artigo descreve o mecanismo pelo qual as DLL de 16 bits podem chamar dll de 32 bits. O mecanismo é designado por um thunk e o método implementado no Microsoft Windows 95, Windows 98 ou Windows Millennium Edition (Me) é designado por um thunk simples. Os três passos principais ao escrever o código de thunk são:
Mais InformaçãoUma simples thunk consiste de 16-bit e uma DLL de 32 bits que funcionam em conjunto. A Chamadas de aplicações Win16 a DLL de 16 bits e a DLL de 16 bits chama uma função exportada a DLL de 32 bits. Quando a função na DLL de 32 bits devolve, devolve novamente para a DLL de 16 bits, que por sua vez devolve novamente para a aplicação Win16. O 16-bit e 32 bits dll trabalho através do Windows 95, Windows 98 ou Windows Me 16-bit e 32 bits kernels para processar todos os detalhes de nível inferior necessários para fazer a transição do código de 16 bits para 32 bits e novamente. Criar um novo thunk simples envolve a criação de scripts thunk (.THK ficheiro). Este script é compilado com o compilador thunk num ficheiro linguagem de assemblagem que está montado duas vezes; uma vez com cada um dos dois sinalizadores:-DIS_16 e - DIS_32. O resultado é 16-bit e um módulo de objecto de 32 bits. Estes módulos de objecto são ligados respectivamente as DLL de 16 bits e 32 bits. O diagrama seguinte resume os ficheiros envolvidos na criação as DLL:
+------------+
| 16to32.THK |
+------------+
|
+------------+
| 16to32.ASM |
+------------+
/ \
-DIS_16 / \ -DIS_32
/ \
+-----------+ +-----------+
| 16THK.OBJ | | 32THK.OBJ |
+-----------+ +-----------+
/ \
+-------+ +-------+ +-------+
| APP16 | -> | DLL16 | -- THUNK -- | DLL32 |
+-------+ +-------+ +-------+
Ferramentas necessárias para criar Thunks plano
Criar o Script ThunkTem de criar um script que será utilizado pelo compilador thunk para criar um thunk. Um script thunk é um ficheiro de texto que contém definições de tipo de protótipos de função das funções que deseja chamar através de thunks e uma especificação da direcção de parâmetros para cada função. Por exemplo, algumas funções requerem parâmetros de entrada e saídos, enquanto outros só poderão necessitar de parâmetros de entrada. Thunk scripts utilizam sintaxe especial para descrever se parâmetros são entrados, saída, ou entrada e saída.Um script thunk 16-> 32 thunks começa com a seguinte instrução: enablemapdirect1632 = VERDADEIRO; Por predefinição, a DLL de 32 bits é carregada apenas quando um thunk a ele é executado pela primeira vez. Uma vez que este enlace tardio é utilizado, código de 16 bits tem não depender qualquer acção efectuada pela inicialização da DLL de 32 bits. Uma vez que irá carregar a DLL de 32 bits quando o primeiro thunk para executar, problemas ao carregar a DLL de 32 bits não serão detectados quando carrega pela primeira vez a DLL de 16 bits. Para desactivar o enlace tardio da DLL de 32 bits, adicione a seguinte linha no script thunk: preload32 = VERDADEIRO; O compilador thunk espera que lado do thunk 16 bits é declarado como __pascal __far e de que o lado de 32 bits é __stdcall. (Declaração WINAPI encarrega deste em ambos os lados.) Não são suportadas pelo compilador thunk __cdecl os __fastcall convenções de chamada. No entanto, tenha em atenção que o compilador thunk não aceita, na realidade, as palavras-chave __far, __pascal ou __stdcall; são considerados como. O seguinte script thunk descreve uma função sem parâmetros: C language: void WINAPI MyThunk32(void); C++ Language: extern "C" void WINAPI MyThunk32(); O seguinte script de thunk utiliza tipos de parâmetro mais complexos, tais como estruturas. Este exemplo mostra também como especificar parâmetros de entrada e saídos: Utilizar o compilador ThunkA utilização de compilador thunk é:Thunk.exe/opções <outputfile> <inputfile> -o A linha seguinte mostra como compilar um 16-> script thunk 32. Esta linha tem um script denominado 16to32.thk e produz um ficheiro de linguagem assembly denominado 16to32.asm: Thunk -t thk 16to32.thk -o 16to32.asm O "-t thk" opção informa o compilador thunk como prefixo as funções thunk do ficheiro linguagem assembly "thk_". Este prefixo é utilizado quando ligar vários thunk scripts para um par de DLLs e é útil para criar um par de DLLs que contêm ambas 16-> 32 e 32-> 16 thunks. Criar a DLL de 16 bits
Criar 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 plano 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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 de Artigos |






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



Voltar ao topo