MFC中引入POCO库之后找不到API的问题
2018-03-20 13:57
363 查看
问题说明
在MFC项目中加入POCO库,导致MFC中的部分方法找不到。比如:
error C3861: “GetObject”: 找不到标识符 “CreateFile”: 找不到标识符
这个问题困扰了我好久,在网上偶然看到有人提了一句说“是因为POCO库用到的一个头文件unwindows.h把这些函数都#undef了”,这时才想到去找POCO库中的UnWindows.h文件去看。
UnWindows.h
#ifndef Foundation_UnWindows_INCLUDED #define Foundation_UnWindows_INCLUDED // Reduce bloat #if defined(_WIN32) #if !defined(WIN32_LEAN_AND_MEAN) && !defined(POCO_BLOATED_WIN32) #define WIN32_LEAN_AND_MEAN #endif #endif #if !defined(_WIN32_WCE) #if defined(_WIN32_WINNT) #if (_WIN32_WINNT < 0x0501) #error Unsupported Windows version. #endif #elif defined(NTDDI_VERSION) #if (NTDDI_VERSION < 0x05010100) #error Unsupported Windows version. #endif #elif !defined(_WIN32_WINNT) // Define minimum supported version. // This can be changed, if needed. // If allowed (see POCO_MIN_WINDOWS_OS_SUPPORT // below), Platform_WIN32.h will do its // best to determine the appropriate values // and may redefine these. See Platform_WIN32.h // for details. #define _WIN32_WINNT 0x0501 #define NTDDI_VERSION 0x05010100 #endif #endif #include <windows.h> #if !defined(POCO_NO_UNWINDOWS) // A list of annoying macros to #undef. // Extend as required. #undef GetBinaryType #undef GetShortPathName #undef GetLongPathName #undef GetEnvironmentStrings #undef SetEnvironmentStrings #undef FreeEnvironmentStrings #undef FormatMessage #undef EncryptFile #undef DecryptFile #undef CreateMutex #undef OpenMutex #undef CreateEvent #undef OpenEvent #undef CreateSemaphore #undef OpenSemaphore #undef LoadLibrary #undef GetModuleFileName #undef CreateProcess #undef GetCommandLine #undef GetEnvironmentVariable #undef SetEnvironmentVariable #undef ExpandEnvironmentStrings #undef OutputDebugString #undef FindResource #undef UpdateResource #undef FindAtom #undef AddAtom #undef GetSystemDirectory #undef GetTempPath #undef GetTempFileName #undef SetCurrentDirectory #undef GetCurrentDirectory #undef CreateDirectory #undef RemoveDirectory #undef CreateFile #undef DeleteFile #undef SearchPath #undef CopyFile #undef MoveFile #undef ReplaceFile #undef GetComputerName #undef SetComputerName #undef GetUserName #undef LogonUser #undef GetVersion #undef GetObject #endif // POCO_NO_UNWINDOWS #endif // Foundation_UnWindows_INCLUDED
该文件中有很多注释说明,这里不再拷贝,有兴趣的去找下这个文件看一下。
解决方法
在UnWindows.h文件中的注释部分已经说明。方法1、使用对应方法的Unicode变体(e.g., GetUserNameA)和ASCII变体(GetUserNameW)
方法2、使用POCO_NO_UNWINDOWS的宏定义(#define POCO_NO_UNWINDOWS)
相关文章推荐
- 一个vc6.0找不到mfcs42.dll的问题
- ubuntu 部署web应用遇到的问题 tomcat 启动之后 404找不到网页
- 关于eclipse安装maven之后,maven找不到JDK问题
- 集成shareSDK的微信、QQ API导致cocoaPods找不到类symbol问题的解决方法
- 解决Visual Studio 2005中找不到MFC80UD.dll的问题
- 问题:Xcode8更新之后模拟器找不到了
- Win32dll工程添加MFC窗口类之后遇到的各种问题
- 在用vc6.0 MFC API 接口时出现的问题
- 在jsp引入jquery报错,$找不到问题的解决方案
- vs2012中创建MFC找不到控件的问题
- SpringMVC WEB项目 jsp引入的js,css,gif等类型文件找不到路径问题
- 关于Windows编程(MFC、API等 自己明白就可)向窗口写内容不能立即显示的问题
- 决Visual Studio 2005中找不到MFC80UD.dll的问题
- 【原创】【续】InstallSheild使用问题笔记-卸载程序之后重新启动,总是报错找不到文件?
- 解决Gradle报错找不到org.gradle.api.internal.project.ProjectInternal.getPluginManager()方法问题
- 关于Android6.0API,找不到org.apache.http.Header问题记录。
- android引入unity-classes.jar之后进行混淆的问题解决
- 解决Visual Studio 2005中找不到MFC80UD.dll的问题
- MFC API实现Excel读写 屏蔽调用SaveAs函数时弹出“文件已存在”问题
- tensorflow.models.rnn.rnn_cell.linear在tensorflow1.0版本之后找不到(附tensorflow1.0 API新变化)