我用ATL写了一个服务,想在其中使用MFCd的类库,结果出现错误。例如使用CString时,编译出现未声明的标识符。请高手指教

解决方案 »

  1.   

    是这样吗?那么如何用MFC写一个服务,有例子吗?
      

  2.   

    HOWTO: Add MFC Support to an ATL Project Q173974
    SUMMARY
    When creating an ATL EXE project using the AppWizard, the MFC support check box is disabled. This article explains how to add MFC support to an ATL EXE project. This article also explains how to add MFC support to an ATL DLL project if you failed to initially select the "support MFC" check box in the AppWizard. MORE INFORMATIONAdding MFC Support to an ATL EXE Project
    Add the following #include directives to StdAfx.h prior to including Atlbase.h:      #include <afxwin.h>   // MFC core and standard components
          #include <afxext.h>   // MFC extensions
          #include <afxdisp.h>  // MFC Automation extensions 
    Change project settings to use MFC. From the Project Settings dialog box, click the General tab, and change the setting in the "Microsoft Foundation Classes" list box to MFC.
    Add a CWinApp derived class and declare a global variable of that type as follows:class CMyApp : public CWinApp
          {
          public:
             virtual BOOL InitInstance();
             virtual int ExitInstance();
          protected:
          BOOL m_bRun;
    }; 
    Replace the _tWinMain function with the following InitInstance and ExitInstance code: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 <LINK TYPE="ARTICLE" VALUE="Q186212">Q186212</LINK> "HOWTO: Unregister MFC
    // Automation Servers" for adding unregistration
    // code.
    else if (lstrcmpi(lpszToken, _T("UnregServer"))==0)
    {
    VERIFY(SUCCEEDED(_Module.UpdateRegistryFromResource(IDR_ServerS2B, FALSE)));
    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;

    For Unicode builds, make sure the entry point is set to wWinMainCRTStartup in the Output category of the Link field in the Project Settings dialog box. For additional information, please see the following article in the Microsoft Knowledge Base:
    Q125750 PRB: Error LNK2001: '_WinMain@16': Unresolved External Symbol 
    Add the following line of code to the beginning of every member function of a COM interface, window procedure, and exported function: AFX_MANAGE_STATE(AfxGetAppModuleState()); 
    For more information on AFX_MANAGE_STATE, consult the VC++ online documentation. 
    For more information about adding MFC support to an ATL COM AppWizard project, please see the following article in the Microsoft Knowledge Base:Q181505 PRB: ATL COM AppWizard Doesn't Offer MFC Support for .EXE 
      

  3.   

    在stdafx.h头文件里加上
    #include <afxwin.h>
    但是要加在#include <atlbase.h>这一行的上面,加在别的地方会报错
      

  4.   

    1、Support MFC
    2、试试楼上方法。
      

  5.   

    If we use MFC in  ATL Project ,lose its efficiency and slim. ok
      

  6.   

    创建工程时可以选择增加MFC支持,如果是现成的工程,就试试楼上的方法。
      

  7.   

    只为了CString导入mfc不合算,你可以使用BSTR
      

  8.   

    sarco(silverleaf
    说的,正解。。