Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Desde sua primeira versão, Visual Basic tem fornecido a instrução Declare como um meio para você se beneficie das funções DLL escritos em outras linguagens, como C. Mas instruções Declare são menos perfeitas e geralmente exigem que você saber muito sobre a DLL como você faz sobre código do Visual Basic. Uma biblioteca de tipos cria uma forma amigável do Visual Basic mais de chamar funções C exportadas.
Este artigo demonstra como criar uma biblioteca de tipos ao criar sua DLL e como fazer referência a biblioteca do Visual Basic.
As bibliotecas de tipo são arquivos de documento composto (.tlb arquivos) usados na automação. Eles contêm informações importantes sobre os tipos, objetos, módulos e interfaces expostas por um servidor de automação para seus clientes. Felizmente, um servidor não precisa estar ciente de automação para aproveitar uma biblioteca de tipos. Na verdade, a maioria das DLLs de C não são servidores de automação. Tudo o que é necessário é que a DLL C declarar suas funções como membros de um módulo em uma biblioteca de tipo. Um cliente de automação, como o Visual Basic, pode ler estas informações e vincular a ela como faria qualquer objeto. Não há necessidade de instruções Declare ou disco rígido se lembrar de constantes porque o Visual Basic faz todo o trabalho.
Há várias vantagens na criação de uma biblioteca de tipos para sua DLL. O mais importante é a melhor segurança de tipos. Mas você também obterá a vantagem de obter um melhor desempenho, porque Visual Basic automaticamente vincula a suas funções usando vinculação antecipada. Por outro lado, todas as instruções de declaração são ligados tardiamente. Além disso, você obter maior controle sobre a forma como sua DLL é apresentada para programadores de Visual Basic. A biblioteca de tipos permite que você fornecer nomes amigáveis do Visual Basic para funções e parâmetros, juntamente com extras úteis como enumerações e tipos definidos pelo usuário (UDTs).
Atualmente, bibliotecas de tipos são criadas usando scripts escritos em Interface Definition Language (IDL) ou o ODL (objeto Description Language). Esses scripts são compilados em seguida, usando MkTypLib.EXE ou MIDL.EXE que vêm com o Visual Studio. O Visual C++ leva parte do trabalho de criar bibliotecas de tipo, porque todos os arquivos ODL que você associar o projeto DLL automaticamente serão ser compilados com MIDL quando você compila seu projeto.
Passo a passo exemplo - criar a DLL e biblioteca de tipos
Abra o Visual C++ 5.0 e selecione File|New. Na guia projetos, selecione "Win32 Dynamic-Link Library" e nome do projeto "TLBSamp."
Selecione File|New novamente. Na guia arquivos, selecione "C++ Source File", nomeie o arquivo "TLBSamp.c" e pressione OK.
Repita a etapa 2 novamente e escolha este tempo "Arquivo de texto" conforme o tipo de arquivo. Nomeie os arquivos "TLBSamp.def" e "TLBSamp.odl" respectivamente.
Em seguida, adicione o seguinte código para TLBSamp.c:
#include <windows.h>
// MyDll_ReverseString -- Reverses the characters of a given string
void __stdcall MyDll_ReverseString(LPSTR lpString)
{
_strrev(lpString);
}
// MyDLL_Rotate -- Returns bit rotation of 32-bit integer value
int __stdcall MyDll_Rotate(int nVal, int nDirect, short iNumBits)
{
int nRet = 0;
if((iNumBits < 1) || (iNumBits > 31))
return nRet;
switch(nDirect)
{
case 0:
// Rotate nVal left by iNumBits
nRet = (((nVal) << (iNumBits)) |
((nVal) >> (32-(iNumBits))));
break;
case 1:
// Rotate nVal right by iNumBits
nRet = (((nVal) >> (iNumBits)) |
((nVal) << (32-(iNumBits))));
break;
}
return nRet;
}
Para tornar as funções exportável, adicione o seguinte para TLBSamp.def:
Declare suas funções em uma biblioteca de tipo adicionando o seguinte para TLBSamp.odl:
// This is the type library for TLBSamp.dll
[
// Use GUIDGEN.EXE to create the UUID that uniquely identifies
// this library on the user's system. NOTE: This must be done!!
uuid(F1B9E420-F306-11d1-996A-92FF02C40D32),
// This helpstring defines how the library will appear in the
// References dialog of VB.
helpstring("KB Sample: Make your C DLL More Accessible"),
// Assume standard English locale.
lcid(0x0409),
// Assign a version number to keep track of changes.
version(1.0)
]
library TLBSample
{
// Define an Enumeration to use in one of our functions.
typedef enum tagRotateDirection
{
tlbRotateLeft=0,
tlbRotateRight=1
}RotateDirection;
// Now define the module that will "declare" your C functions.
[
helpstring("Sample functions exported by TLibSamp.dll"),
version(1.0),
// Give the name of your DLL here.
dllname("TLBSamp.dll")
]
module MyDllFunctions
{
[
// Add a description for your function that the developer can
// read in the VB Object Browser.
helpstring("Returns the reverse of a given string."),
// Specify the actual DLL entry point for the function. Notice
// the entry field is like the Alias keyword in a VB Declare
// statement -- it allows you to specify a more friendly name
// for your exported functions.
entry("MyDll_ReverseString")
]
// The [in], [out], and [in, out] keywords tell the Automation
// client which direction parameters need to be passed. Some
// calls can be optimized if a function only needs a parameter
// to be passed one-way.
void __stdcall ReverseString([in, out] LPSTR sMyString);
[
helpstring("Rotates a Long value in the given direction."),
entry("MyDll_Rotate")
]
// Besides specifying more friendly names, you can specify a more
// friendly type for a parameter. Notice the Direction parameter
// has been declared with our enumeration. This gives the VB
// developer easy access to our constant values.
int __stdcall BitRotate([in] int Value,
[in] RotateDirection Direction,
[in] short Bits);
} // End of Module
}; // End of Library
Compile sua biblioteca DLL e tipo escolhendo "Rebuild All" no menu Build. Ao concluir, copie a nova DLL (TLBSamp.dll) para seu diretório Visual Basic para teste.
Observação: Como uma questão de comodidade, talvez você queira incluir sua biblioteca de tipos em sua DLL como um recurso. Isso seria gratuitamente você precisar distribuir um arquivo TLB separado para os desenvolvedores de Visual Basic.
Para adicionar a biblioteca como um recurso, conclua as seguintes etapas:
Selecione File|New. Na guia arquivos, selecione "Arquivo de texto", nomeie o arquivo "TLBSamp.rc" e pressione ' OK '.
Na janela de texto que aparece adicione a seguinte linha:
1 typelib TLBSamp.tlb
Salve o arquivo e recompile seu DLL. Ao concluir, copie a nova DLL (TLBSamp.dll) para a pasta Visual Basic para teste; sobrescrever o arquivo anterior se for solicitado.
Exemplo passo a passo - A aplicativos de teste do Visual Basic
Para testar sua DLL e biblioteca de tipos, abra o Visual Basic 5.0 e crie um novo projeto padrão. O Form1 é criado por padrão.
No menu Project, selecione References para chamar até referências a caixa de diálogo e, em seguida, clique em Procurar para localizar sua nova biblioteca tipo (ou sua DLL) se você adicionou a biblioteca como um recurso. Após você ter localizado, pressione ' OK '. Visual Basic será automaticamente registrar a biblioteca para você na primeira vez que faça referência a ele. Certifique-se de que sua biblioteca ("KB exemplo: Verifique seu C DLL mais acessíveis") foi verificado nas referências de lista e feche a caixa de diálogo.
Pressione a tecla F2 para exibir o Pesquisador de objetos. Observe que sua biblioteca (TLBSamp) foi adicionado para o projeto Visual Basic e que agora podem ser chamadas suas funções como se eles fossem funções nativas do Basic Visual. Visual Basic será suspenso sua lista de enumeração mesmo quando o desenvolvedor está digitando no parâmetro de direção para o BitRotate função.
Adicione um CommandButton ao Form1 e adicione o seguinte código de clique do botão evento:
Private Sub Command1_Click()
Dim n1 As Long, n2 As Long, nTmp As Long
Dim sTest As String, sMsg As String
sTest = "Hello World!"
n1 = 100
ReverseString sTest
sMsg = sTest & " | "
ReverseString sTest
sMsg = sMsg & sTest & vbCrLf
nTmp = BitRotate(n1, tlbRotateLeft, 2)
n2 = BitRotate(nTmp, tlbRotateRight, 2)
sMsg = sMsg & Str$(n1) & " : " & Str$(nTmp) & " : " & Str$(n2)
MsgBox sMsg
End Sub
Agora pressione a tecla F5 para executar o projeto vb5allB no IDE.
Observação: Se você receber uma mensagem de erro, talvez seja porque o Visual Basic não pode localizar sua DLL. Verifique se que você copiou-lo para o diretório Visual Basic ou o caminho de sistema antes de executar seu aplicativo de teste.
IMPORTANTE: 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: 189133
(http://support.microsoft.com/kb/189133/en-us/
)
Quanto esforço foi necessário para seguir os procedimentos deste artigo?
Muito baixo
Baixo
Moderado
Alto
Muito alto
O que podemos fazer para melhorar essa informação?
Para proteger sua privacidade, não inclua informações de contato em seus comentários.
Obrigado! Seus comentários são usados para nos ajudar a aperfeiçoar o conteúdo de suporte. Para obter mais opções de ajuda, visite a Home Page de Ajuda e Suporte.