解決VC使用unicode字符集時某些ANSI版本函數無法調用的問題

(根據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
);

任選一種方案,寫到需要調用處前面,作爲一個函數聲明。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章