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.
Este artigo representa uma introdução à criação de clientes do Visual C++ para componentes ActiveX do Visual Basic. Se já estiver proficient com o Visual C++, poderá consultar a secção de referência para uma lista de tópicos mais avançados.
Crie um projecto do Visual Basic ActiveX DLL. Aula1 é criado por predefinição.
Adicione o seguinte código para Aula1:
Public Function MyVBFunction(x As Integer) As Integer
MsgBox x
End Function
Compile a DLL como c:\Project1.dll e saia do Visual Basic.
Método 1 - CreateDispatch:
Inicie o Visual C++ e seleccione novo no menu ficheiro. Escolher MFC AppWizard (Exe) e um nome de projecto e clique em ' OK '. Quando o AppWizard MFC é apresentada a caixa de diálogo, clique em ' Concluir '. Clique em OK na caixa de diálogo seguinte.
Seleccione ClassWizard no menu Ver, escolha Ctst1App na caixa Nome de classe e faça duplo clique em InitInstance na caixa de mensagens. Clique em Editar o código para apresentar o código para CTst1App::InitInstance() BOOL, localize a linha AfxEnableControlContainer(); e adicione a seguinte linha antes:
AfxOleInit();
Seleccione ClassWizard no menu Ver e faça clique sobre o separador de automatização. AddClass clique em e seleccione "de TypeLibrary". Especificar Project1.dll, a DLL do Visual Basic que foi criada no passo 3. Quando aparecer a caixa de diálogo Confirmar Classes, clique em OK. Clique em OK novamente para fechar o MFC ClassWizard caixa de diálogo.
Abrir o ficheiro de .cpp < Nome da Aplicação > e adicione a linha # include "Project1.h". Tem de incluir Project1.h sempre que tiver código acede project1.dll.
Abra o ClassWizard novamente. No separador mapeamentos de mensagem, seleccione CAboutDlg na caixa de nome de classe e IDOK na caixa ID de objecto e, em seguida, faça duplo clique em BN_CLICKED. Clique em OK em resposta a caixa de diálogo e OK novamente para fechar o ClassWizard.
Abrir < Nome da Aplicação >.cpp, desloque-se para baixo para theCAboutDlg::OnOK() e substitua-o seguinte código:
void CAboutDlg::OnOK()
{
short st = 2;
short st1;
_Class1 p;
p.CreateDispatch("Project1.Class1");
st1 = p.MyVBFunction(&st);
CDialog::OnOK();
}
Compile o ficheiro .exe (F7).
Execute o ficheiro .exe e seleccione Acerca de no menu ' Ajuda '. Clique em OK na caixa Acerca de e é apresentada a caixa de mensagem que foi especificada em project1.dll. Clique no botão Fechar para fechar a caixa de diálogo.
Método 2 - #IMPORT:
Inicie o Visual C++ 6.0 e crie uma consola Win32 Application. Seleccione "Um projecto vazio" e clique em ' Concluir '.
Aponte para adicionar a um projecto no menu projecto e clique em novo para adicionar um novo ficheiro de origem do C++ ao projecto. Cole o seguinte código no novo ficheiro de origem e guardá-lo:
#include <stdio.h>
// This is the path for your DLL.
// Make sure that you specify the exact path.
#import "c:\project1.dll" no_namespace
void main()
{
BSTR bstrDesc;
try
{
CoInitialize(NULL);
short st = 2;
short st1;
// Declare the Interface Pointer for your Visual Basic object. Here,
// _Class1Ptr is the Smart pointer wrapper class representing the
// default interface of the Visual Basic object.
_Class1Ptr ptr;
// Create an instance of your Visual Basic object, here
// __uuidof(Class1) gets the CLSID of your Visual Basic object.
ptr.CreateInstance(__uuidof(Class1));
st1 = ptr->MyVBFunction(&st);
}
catch(_com_error &e)
{
bstrDesc = e.Description();
}
CoUninitialize();
}
Compile e execute o projecto. Deverá ser apresentada a caixa de mensagem de Project1.DLL.
O método #import pode ser utilizado de uma aplicação de Win32, uma aplicação de consola, ou em MFC bem.
Método 3 - puro COM interface
Inicie o Visual C++ e seleccione novo a partir do menu ' ficheiro '. Escolher MFC AppWizard (Exe), atribua um nome tst1 projecto e clique em OK. Quando o MFC caixa de diálogo Appwizard for apresentada, seleccione a caixa de diálogo com base e clique em ' Concluir '. Clique em OK quando é apresentada a seguinte caixa de diálogo.
O Editor de recursos é iniciado por predefinição. Elimine todos os controlos na caixa de diálogo e adicione um botão de comando, mantendo a legenda predefinidos "Button1".
Faça duplo clique em Button1 para apresentar a função de membro adicionar caixa de diálogo. Clique em OK para aceitar o nome OnButton1.
Clique em Visualizador de objectos OLE/COM no menu Ferramentas. Seleccione Ver Typelib a partir do menu ' ficheiro ' e escolha Project1.dll que criou anteriormente. Clique em Abrir para apresentar o ITypeLib Viewer, que contém o ficheiro .idl para a DLL.
Copie o conteúdo do ficheiro .idl (conteúdo do painel da direita) para a área de transferência. Mantenha a tecla SHIFT premida enquanto paginação ou deslocamento do primeiro carácter para o fim do texto no painel. Prima CTRL+C para copiar o texto marcado para a área de transferência.
Clique em Novo no menu Visual C++ ficheiro. Seleccione o ficheiro de texto na nova caixa de diálogo, nome test1.idl ficheiro e clique em OK.
Um ficheiro de texto em branco aparece. Colar os dados da área de transferência no mesmo e guarde o ficheiro.
Seleccionar definições no menu Project, expanda tst1 os nós de ficheiros de origem da vista de árvore e seleccione test1.idl. Clique no separador MIDL, introduza test1.h na caixa "Nome de ficheiro de cabeçalho de saída" e clique em OK.
Abra tst1Dlg.cpp e adicione os seguintes ficheiros para a secção inclui:
#include <initguid.h>
#include "test1.h"
Clique em ClassWizard no menu Ver, seleccione Ctst1App na caixa Nome de classe e faça duplo clique em InitInstance na caixa de mensagens. Clique em Editar código para visualizar o código:
BOOL CTst1App::InitInstance()
localizar a linha:
AfxEnableControlContainer();
a seguinte linha antes de adicionar:
AfxOleInit();
Abra o ClassWizard novamente. No separador mensagens mapas seleccione CTst1Dlg na caixa de nome de classe e IDC_BUTTON1 na caixa ID de objecto. Faça duplo clique BN_CLICKED na caixa de mensagens e clique em Editar o código para visualizar o código para CTst1Dlg::OnButton1() void. Substituir a função OnButton1() com o seguinte código:
void CTst1Dlg::OnButton1()
{
// TODO: Add your control notification handler code here.
_Class1 *pClass = NULL;
IUnknown *pUnk = NULL;
// HRESULT hr = CoCreateInstance(CLSID_Class1,NULL,
// CLSCTX_INPROC_SERVER,IID__Class1,(void **)&pClass);
// You can directly get the Interface ID as in the previous line or
// you can do a QueryInterface on IUnknown to get the IID
// as in the following three lines:
HRESULT hr = CoCreateInstance(CLSID_Class1,NULL,CLSCTX_INPROC_SERVER,
IID_IUnknown,(void **)&pUnk);
hr = pUnk->QueryInterface(IID__Class1,(void **)&pClass);
pUnk->Release();
// Once you have the IID, you can make use of the interface pointer
// to access our Visual Basic DLL.
short st = 2;
short st1;
hr = pClass->MyVBFunction(&st,&st1);
pClass->Release();
}
Compile o ficheiro .exe (F7) e executar a aplicação (F5). Clique em Button1 na caixa de diálogo. É apresentada a caixa de mensagem de DLL do Visual Basic.
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 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: 194873
(http://support.microsoft.com/kb/194873/en-us/
)
Qual foi o esforço que despendeu pessoalmente para utilizar este artigo?
Muito baixo
Baixo
Moderado
Elevado
Muito elevado
Diga-nos porquê e o que podemos fazer para melhorar estas informações
Obrigado! Os seus comentários são utilizados para ajudar-nos a melhorar o conteúdo do nosso suporte. Para obter mais opções de assistência, visite a Home Page de Ajuda e Suporte.