Poco 1.4.2 Windowsプラットフォームでの使用時にlinkが「CreateProcessis not defined」とエラーを報告する解決
2542 ワード
Poco 1.4.2 Windowsプラットフォームでの使用時にlinkが「CreateProcessis not defined」とエラーを報告
理由:PocoライブラリのundefによるCreateProcessマクロ
ps,位置決め問題の過程:
0)最初はこの問題がPOCOライブラリによるものだとは知らなかった...
1)MSDN CreateProcessの説明を確認し、本工事定義のWINVERを確保する.WIN32_WINNT, _WIN32_WINDOWS, _WIN32_IEバージョンではCreateProcessが使用可能
2)鬱陶しい
3)自分がいる.cppにCreateProcessのマクロ定義を追加し、問題が解決したことを発見しました...
4)上記の解決法は卑猥に見えますが…
5)CreateProcessマクロが定義されていないことによる問題
6)CreateProcess関数を呼び出した.cppファイルのヘッダの追加:
コンパイルして、最上部にいる間に#error“why???”に行かないことを発見します
この3つのコードを上から下に移動し続けます.#includeに移動すると、#error“why???”
7)以上より,CreateProcessマクロは本来定義されている.卵は、Pocoのヘッダファイルを導入した後、マクロがundefされた.
8)googleは、PocoライブラリがUnicode/ANSIを処理する際に使用する独自のメカニズム(POCO_WIN 32_UTF 8)を発見し、CreateProcessはCreateProcessA/WがPocoの定義と衝突する可能性があると定義した.詳細はFoundationincludePocoUnWindows.hヘッダのコメント.UnWindowsでhにはundefにいくつかのCreateProcessなどのマクロ定義がある.
【解決策】Windowsプラットフォームで以下の関数を使用する必要がある場合、Pocoを含むヘッダファイルの前に、#define POCO_NO_UNWINDOWS
ps,Pocoライブラリのundefが削除されたマクロは以下のとおりである.
理由:PocoライブラリのundefによるCreateProcessマクロ
ps,位置決め問題の過程:
0)最初はこの問題がPOCOライブラリによるものだとは知らなかった...
1)MSDN CreateProcessの説明を確認し、本工事定義のWINVERを確保する.WIN32_WINNT, _WIN32_WINDOWS, _WIN32_IEバージョンではCreateProcessが使用可能
2)鬱陶しい
3)自分がいる.cppにCreateProcessのマクロ定義を追加し、問題が解決したことを発見しました...
#ifndef CreateProcess
//#error "why CreateProcess is not defined?"
// Why???
#ifdef _UNICODE
#define CreateProcess CreateProcessW
#else
#define CreateProcess CreateProcessA
#endif // _UNICODE
#endif
4)上記の解決法は卑猥に見えますが…
5)CreateProcessマクロが定義されていないことによる問題
6)CreateProcess関数を呼び出した.cppファイルのヘッダの追加:
#ifundef CreateProcess
#error "why???"
#endif
コンパイルして、最上部にいる間に#error“why???”に行かないことを発見します
この3つのコードを上から下に移動し続けます.#includeに移動すると、#error“why???”
7)以上より,CreateProcessマクロは本来定義されている.卵は、Pocoのヘッダファイルを導入した後、マクロがundefされた.
8)googleは、PocoライブラリがUnicode/ANSIを処理する際に使用する独自のメカニズム(POCO_WIN 32_UTF 8)を発見し、CreateProcessはCreateProcessA/WがPocoの定義と衝突する可能性があると定義した.詳細はFoundationincludePocoUnWindows.hヘッダのコメント.UnWindowsでhにはundefにいくつかのCreateProcessなどのマクロ定義がある.
【解決策】Windowsプラットフォームで以下の関数を使用する必要がある場合、Pocoを含むヘッダファイルの前に、#define POCO_NO_UNWINDOWS
#define POCO_NO_UNWINDOWS
#include
ps,Pocoライブラリのundefが削除されたマクロは以下のとおりである.
#if !defined(POCO_NO_UNWINDOWS)
// A list of annoying macros to #undef.
// Feel free to 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 GetSystemDirector
#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