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 você já estiver proficientes com o Visual C++, talvez você queira consulte a seção referência para obter uma lista de tópicos mais avançados.
Crie um projeto Visual Basic ActiveX DLL. Class1 é criado por padrão.
Adicione o seguinte código para Class1:
Public Function MyVBFunction(x As Integer) As Integer
MsgBox x
End Function
Compile a DLL como c:\Project1.dll e sair do Visual Basic.
Método 1 - CreateDispatch:
Inicie o Visual C++ e selecione Novo no menu Arquivo. Escolha AppWizard MFC (Exe) e um nome de projeto e clique em OK. Quando o AppWizard MFC caixa de diálogo for exibida, clique em Concluir. Clique em OK na próxima caixa de diálogo.
Selecione ClassWizard no menu Exibir, selecione Ctst1App na caixa de nome de classe e clique duas vezes em CWinAppEx na caixa de mensagens. Clique em Editar código para exibir o código para CTst1App::InitInstance() BOOL, localize a linha AfxEnableControlContainer(); e adicione a seguinte linha antes:
AfxOleInit();
Selecione ClassWizard no menu Exibir e clique em guia de automação clique AddClass e selecione "TypeLibrary". Especificar Project1.dll, a DLL do Visual Basic que foi criado na etapa 3. Quando a caixa de diálogo Confirmar Classes for exibida, clique em OK. Clique em OK novamente para fechar o MFC ClassWizard caixa de diálogo.
Abrir o arquivo de .cpp < Nome do Aplicativo > e adicione a linha # include "Project1.h". Você precisa incluir Project1.h sempre que você tiver código que acessa project1.dll.
Abra o ClassWizard novamente. Na guia mapas de mensagem, selecione CAboutDlg na caixa nome de classe e IDOK na caixa de identificações de objeto e, em seguida, clique duas vezes em BN_CLICKED. Clique em OK em resposta à caixa de diálogo e OK novamente para fechar o ClassWizard.
Abrir < Nome do Aplicativo >.cpp, role até o final para theCAboutDlg::OnOK() e substitui-lo com 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 arquivo .exe (F7).
Execute o arquivo .exe e selecione sobre no menu Ajuda. Clique em OK na caixa sobre e a caixa de mensagem que foi especificada no project1.dll aparecer. Clique no botão Fechar para fechar a caixa de diálogo.
Método 2 - #IMPORT:
Inicie o Visual C++ 6.0 e crie um Console Win32 Application. Selecione "Um projeto vazio" e clique em Concluir.
Aponte para Add to Project no menu Project e clique em Novo para adicionar um novo arquivo de origem do C++ para o projeto. Cole o seguinte código no novo arquivo de origem e salvá-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 seu projeto. A caixa de mensagem do Project1.DLL deve aparecer.
O método # Import pode ser usado em um aplicativo Win32, um aplicativo de console, ou no MFC também.
Método 3 - puro interface COM
Inicie o Visual C++ e selecione Novo no menu Arquivo. Escolha AppWizard MFC (Exe), nome tst1 projeto e clique em OK. Quando o MFC caixa de diálogo Appwizard for exibida, selecione com caixa de diálogo e clique em Concluir. Clique em OK quando a próxima caixa de diálogo for exibida.
O Editor de recursos é iniciado por padrão. Exclua todos os controles na caixa de diálogo e adicione um botão de comando, mantendo a legenda padrão "Button1".
Clique duas vezes em Button1 para exibir a função de membro adicionar caixa de diálogo. Clique em OK para aceitar o nome OnButton1.
Clique em Visualizador de objeto OLE/COM no menu Ferramentas. Selecione Exibir Typelib no menu ' arquivo ' e escolha Project1.dll criado anteriormente. Clique em Abrir para exibir o Visualizador ITypeLib, que contém o arquivo .IDL para sua DLL.
Copie o conteúdo do arquivo .idl (conteúdo do painel direito) para a área de transferência. Mantenha a tecla SHIFT pressionada enquanto paginação ou rolagem do primeiro caractere para o final do texto do painel. Pressione CTRL+C para copiar o texto marcado para a área de transferência.
Clique em novo no menu Arquivo do Visual C++. Selecione o arquivo de texto na caixa de diálogo Novo, nome test1.idl arquivo e clique em OK.
Um arquivo de texto em branco aparece. Colar os dados da área de transferência para ele e salve o arquivo.
Selecione configurações no menu Project, expanda tst1 e nós de arquivos de origem de modo de exibição de árvore e selecione test1.idl. Clique na guia MIDL, digite test1.h na caixa "Nome do arquivo de cabeçalho saída" e clique em OK.
Abra tst1Dlg.cpp e adicione os seguintes arquivos para a seção inclui:
#include <initguid.h>
#include "test1.h"
Clique em ClassWizard no menu Exibir, selecione Ctst1App na caixa nome de classe e clique duas vezes em CWinAppEx na caixa de mensagens. Clique em Editar código para exibir o código para:
BOOL CTst1App::InitInstance()
localizar a linha:
AfxEnableControlContainer();
adicionar a seguinte linha antes:
AfxOleInit();
Abra o ClassWizard novamente. Na guia mapas de mensagem selecione CTst1Dlg na caixa nome de classe e IDC_BUTTON1 na caixa de identificações de objeto. Clique duas vezes em BN_CLICKED na caixa de mensagens e clique em Editar código para exibir 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 arquivo .exe (F7) e execute seu aplicativo (F5). Clique em Button1 na caixa de diálogo. Será exibida a caixa de mensagem da 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 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: 194873
(http://support.microsoft.com/kb/194873/en-us/
)
Quanto esforço foi necessário para seguir os procedimentos deste artigo?
Muito baixo
Baixo
Moderado
Alto
Muito alto
Diga-nos o porque e o que podemos fazer para melhorar esta informação
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.