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.
Ao criar um projeto ATL EXE usando o AppWizard, a caixa de seleção de suporte do MFC está desabilitada. Este artigo explica como adicionar suporte a MFC para um projeto ATL EXE. Este artigo também explica como adicionar suporte a MFC para um projeto ATL DLL se você Falha ao selecionar a caixa de seleção "suporte MFC" inicialmente no AppWizard.
Adicione o seguinte # include diretivas para StdAfx.h antes para incluindo atlbase.h:
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
#include <afxdisp.h> // MFC Automation extensions
Alterar configurações de projeto para usar MFC. Da caixa de diálogo Configurações do projeto , clique na guia Geral e altere a configuração na caixa de listagem " Microsoft Foundation Classes " ao MFC.
Adicionar uma classe derivada de CWinApp e declarar uma variável global desse tipo da seguinte maneira:
class CMyApp : public CWinApp
{
public:
virtual BOOL InitInstance();
virtual int ExitInstance();
protected:
BOOL m_bRun;
};
Substituir a função _tWinMain com o seguinte código CWinAppEx e ExitInstance:
BOOL CMyApp::InitInstance()
{
// Initialize OLE libraries.
if (!AfxOleInit())
{
AfxMessageBox(_T("OLE Initialization Failed!"));
return FALSE;
}
// Initialize CcomModule.
_Module.Init(ObjectMap, m_hInstance);
_Module.dwThreadID = GetCurrentThreadId();
// Check command line arguments.
TCHAR szTokens[] = _T("-/");
m_bRun = TRUE;
LPCTSTR lpszToken = FindOneOf(m_lpCmdLine, szTokens);
while (lpszToken != NULL)
{
// Register ATL and MFC class factories.
if (lstrcmpi(lpszToken, _T("Embedding"))==0 ||
lstrcmpi(lpszToken, _T("Automation"))==0)
{
AfxOleSetUserCtrl(FALSE);
break;
}
// Unregister servers.
// There is no unregistration code for MFC
// servers. Refer to <WWLINK TYPE="ARTICLE" VALUE="Q186212">Q186212</WWLINK> "How To Unregister MFC
// Automation Servers" for adding unregistration
// code.
else if (lstrcmpi(lpszToken, _T("UnregServer"))==0)
{
VERIFY(SUCCEEDED(_Module.UpdateRegistryFromResource(IDR_ServerS2B, FALSE)));
//Replace IDR_ServerS2B with your project specific resource ID for the registry script resource
VERIFY(SUCCEEDED(_Module.UnregisterServer(TRUE)));
m_bRun = FALSE;
break;
}
// Register ATL and MFC objects in the registry.
else if (lstrcmpi(lpszToken, _T("RegServer"))==0)
{
VERIFY(SUCCEEDED(_Module.UpdateRegistryFromResource(IDR_ServerS2B, TRUE)));
VERIFY(SUCCEEDED(_Module.RegisterServer(TRUE)));
COleObjectFactory::UpdateRegistryAll();
m_bRun = FALSE;
break;
}
lpszToken = FindOneOf(lpszToken, szTokens);
}
if (m_bRun)
{
// Comment out the next line if not using VC 6-generated
// code.
_Module.StartMonitor();
VERIFY(SUCCEEDED(_Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE)));
VERIFY(COleObjectFactory::RegisterAll());
// To run the EXE standalone, you need to create a window
// and assign the CWnd* to m_pMainWnd.
LPCTSTR szClass = AfxRegisterWndClass(NULL);
m_pMainWnd = new CWnd;
m_pMainWnd->CreateEx(0, szClass, _T("SomeName"), 0, CRect(0, 0, 0, 0), NULL, 1234);
}
return TRUE;
}
int CMyApp::ExitInstance()
{
// MFC's class factories registration is
// automatically revoked by MFC itself.
if (m_bRun)
{
_Module.RevokeClassObjects();
Sleep(dwPause); //wait for any threads to finish
}
_Module.Term();
return 0;
}
Para Unicode cria, verifique se que o ponto de entrada está definido para wWinMainCRTStartup na categoria de saída do campo link na caixa de diálogo Configurações de projeto . Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
125750
(http://support.microsoft.com/kb/125750/
)
Você receber uma mensagem de erro "_WinMain@16 símbolo externo não resolvidos" ao tentar criar um aplicativo do MFC com suporte a Unicode no Visual C++
Adicione a linha de código a seguir ao início de cada função de membro de uma interface COM, o procedimento de janela e função exportada:
AFX_MANAGE_STATE(AfxGetAppModuleState());
para obter mais informações sobre AFX_MANAGE_STATE, consulte a documentação on-line do VC ++.
Para obter mais informações sobre como adicionar suporte a MFC para um projeto ATL COM AppWizard, consulte o seguinte artigo na Base de dados de Conhecimento da Microsoft:
181505
(http://support.microsoft.com/kb/181505/EN-US/
)
PROBLEMA: ATL COM AppWizard não oferecer suporte a MFC .exe
Mova o código no DllMain gerado pelo AppWizard DLL_PROCESS_ATTACH e DLL_PROCESS_DETACH o CMyApp CWinAppEx e ExitInstance e remova o DllMain da seguinte maneira:
BOOL CMyApp::InitInstance()
{
_Module.Init(ObjectMap, m_hInstance);
return CWinApp::InitInstance();
}
int CMyApp::ExitInstance()
{
// MFC's class factories registration is
// automatically revoked by MFC itself.
if (m_bRun)
_Module.RevokeClassObjects();
Adicione a linha de código a seguir ao início de cada função de membro de uma interface COM, o procedimento de janela e função exportada:
AFX_MANAGE_STATE(AfxGetStaticModuleState());
Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
140850
(http://support.microsoft.com/kb/140850/
)
Como exportar funções corretamente usando a biblioteca compartilhada do MFC
Observação: Para todas as compilações de versão, certifique-se que a definição de pré-processamento _ATL_MIN_CRT tiver sido removida. Você encontrará essas definições na categoria pré-processador da guia C/C ++ na caixa de diálogo Configurações do projeto .
Quando adicionar uma classe derivada de um MFC classe usando o ClassWizard para um projeto ATL EXE ou para um projeto ATL DLL sem "MFC Support", o compilador emitirá um erro C2504.
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: 173974
(http://support.microsoft.com/kb/173974/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.