close

今天開始嘗試學習用 win32API 開發 windows 軟體,

雖然大家都說現在用 win32 開發軟件已經落伍了,原因好像是開發速度太慢什麼的...

不過這都不關小弟的事,

身為一個閒閒沒事做的大學狗,小弟還不需要去煩惱那些東西,

只是聽人說學 WIN32 可以學到許多東西就來學看看罷了XD

 

雖然現在的開發軟體大多很方便,

只要專案一開,就幫你把基本的框架都打好了,

但竟然是要學習,小弟還是決定找幾個教學網站自己慢慢打、慢慢學,

最後找到的網站是這個

跟我一起玩Win32开发

http://blog.csdn.net/column/details/win32-dev.html?&page=2

東邪獨狐大大的win32教學,

東邪大大教得真的很好,就連小弟這個從來沒碰過專案的程式萌新都能看得懂他在說甚麼。

 

但在到了東邪大大的第二章,

也就是打基本架構時就出問題啦.....

 

//==========================進入問題=============================

問題:  error: cannot convert 'WCHAR* {aka wchar_t*}' to 'LPCSTR {aka const char*}' in assignment

開發軟體: code::block 16.01

編譯器: GCC

片段程式碼:

#include<windows.h>

//windows入口
int CALLBACK WinMain(
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow)
{
//類名
    WCHAR* cls_Name = L"My Class";  //在winnt.h 中宣告 typedef wchar_t WCHAR;
//設計窗口
    WNDCLASS wc; 
    wc.style = CS_HREDRAW|CS_VREDRAW;
    wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
    wc.lpfnWndProc = WindowProc;
    wc.lpszClassName = cls_Name;   //錯誤行
    wc.hInstance = hInstance;

 

解決過程:

上網查了一堆資料,

後來查到了跟小弟出現差不多狀況的問題,

https://stackoverflow.com/questions/13977388/error-cannot-convert-const-wchar-t-13-to-lpcstr-aka-const-char-in-assi

從其解答者的回答中知道了問題點,

Your project doesn't have the UNICODE preprocessor symbol defined, so Windows API functions that take pointers to strings expect char * and not wchar_t *

沒錯,小弟忘了define UNICODE,應該說小弟根本不知道要define......

因為沒有define UNICODE的關系,WINAPI貌似會把原本應該指向 wchar_t*的指標改成指向 char* ,這也是小弟的問題所在,


 

解決辦法:

加入以下程式碼之後就能正常運行了。

#define UNICODE

#define _UNICODE
 

 

更多有關 UNICODE 以及 wchar_t 和 char 差別的資料:

所謂的寬字元和一般字元有何不同 

http://www.programmer-club.com.tw/ShowSameTitleN/c/33085.htm

C++ - _T含義 C++語言中“_T”是什麼意思?

http://fanli7.net/a/JAVAbiancheng/ANT/20110821/107979.html

萬國碼字串函式

http://shukaiyang.myweb.hinet.net/cpp/unicodestr.zhtw.htm

arrow
arrow
    文章標籤
    unicode codeblock win32
    全站熱搜

    新鮮的肝 發表在 痞客邦 留言(0) 人氣()