gpt4 book ai didi

c++ - 错误 : 'CAtlServiceModuleT' : is not a member of 'ATL'

转载 作者:太空狗 更新时间:2023-10-29 23:16:51 25 4
gpt4 key购买 nike

正确构建 C++/ATL 项目:我正在尝试将我的 MFC 代码用于 ATL(服务 EXE)项目。其中,我包含了我所有的 Existing Item。当我将项目配置为 Use MFC in a Shared DLL 时,我在调试时收到此错误消息:

error C2039: 'CAtlServiceModuleT' : is not a member of 'ATL'.

而且,调试器已经在标记的行下划线了:

class CATLProject6Module : public ATL::CAtlServiceModuleT< CATLProject6Module, IDS_SERVICENAME > //this one
{
public :
DECLARE_LIBID(LIBID_ATLProject6Lib)
DECLARE_REGISTRY_APPID_RESOURCEID(IDR_ATLPROJECT6, "{3A7F25E3-CA7E-4C90-8B37-11DA70E42248}")
HRESULT InitializeSecurity() throw()
{
// TODO : Call CoInitializeSecurity and provide the appropriate security settings for your service
// Suggested - PKT Level Authentication,
// Impersonation Level of RPC_C_IMP_LEVEL_IDENTIFY
// and an appropriate Non NULL Security Descriptor.

return S_OK;
}
};

CATLProject6Module _AtlModule;

请问我该如何解决?

你可以在这里找到我的stdafx.h:

// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently,
// but are changed infrequently

#if !defined(AFX_STDAFX_H__91E578F6_59F0_4867_BDE7_FCC229588C74__INCLUDED_)
#define AFX_STDAFX_H__91E578F6_59F0_4867_BDE7_FCC229588C74__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers

#define _WIN32_WINNT 0x0502 //so that I can use ReadDirectoryChanges

#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT


//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_STDAFX_H__91E578F6_59F0_4867_BDE7_FCC229588C74__INCLUDED_)


#ifndef STRICT
#define STRICT
#endif

#include "targetver.h"

#define _ATL_FREE_THREADED

#define _ATL_NO_AUTOMATIC_NAMESPACE

#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit


#define ATL_NO_ASSERT_ON_DESTROY_NONEXISTENT_WINDOW

#include "resource.h"
#include <atlbase.h>
#include <atlcom.h>
#include <atlctl.h>

非常感谢!!

最佳答案

主要问题是您将两个具有不同概念的相似事物混合在一起。

MFC 和 ATL 为基类提供了一种支持内部程序功能(消息循环、注册等)的方法。

如果您首先包含 MFC header ,则模块类(包括 CAtlServiceModuleT 模板)将被排除。您会在头文件中看到 #ifndef _AFX。

您可以首先包括 atl header 来解决此问题。但是在包含 afx.h header 之前,您需要#undef WINDOWS。但这是一个 hack!

也许更好的方法是使用 MFC 框架作为基类。原因很简单:现有 CWinApp 的大多数 MFC 中继......所以你需要这个。但是当您使用它时,您不再需要 CAtlServiceModuleT!

关于c++ - 错误 : 'CAtlServiceModuleT' : is not a member of 'ATL' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21708714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com