(根據windows 核心編程描述,很多A版本內部其實是調用的W版本,效率上W 更好,更推薦)
查看windows 一個函數的定義如下:
WINBASEAPI
_NullNull_terminated_
LPCH
WINAPI
GetEnvironmentStrings(
VOID
);
WINBASEAPI
_NullNull_terminated_
LPWCH
WINAPI
GetEnvironmentStringsW(
VOID
);
#ifdef UNICODE
#define GetEnvironmentStrings GetEnvironmentStringsW
#else
#define GetEnvironmentStringsA GetEnvironmentStrings
#endif // !UNICODE
可以發現是無法調用 GetEnvironmentStringsA 的, 而 GetEnvironmentStrings 使用的是W版本。
手動複製出來(依然寫成A版本):
WINBASEAPI
_NullNull_terminated_
LPCH
WINAPI
GetEnvironmentStringsA(
VOID
);
發現依然不行。解決方案如下:
// 方案1
//extern "C" __declspec(dllimport) LPCH WINAPI GetEnvironmentStringsA(VOID);
// 方案2
extern "C" WINBASEAPI
_NullNull_terminated_
LPCH
WINAPI
GetEnvironmentStringsA(
VOID
);
任選一種方案,寫到需要調用處前面,作爲一個函數聲明。