今天開始嘗試學習用 win32API 開發 windows 軟體,
雖然大家都說現在用 win32 開發軟件已經落伍了,原因好像是開發速度太慢什麼的...
不過這都不關小弟的事,
身為一個閒閒沒事做的大學狗,小弟還不需要去煩惱那些東西,
只是聽人說學 WIN32 可以學到許多東西就來學看看罷了XD
雖然現在的開發軟體大多很方便,
只要專案一開,就幫你把基本的框架都打好了,
但竟然是要學習,小弟還是決定找幾個教學網站自己慢慢打、慢慢學,
最後找到的網站是這個
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;
解決過程:
上網查了一堆資料,
後來查到了跟小弟出現差不多狀況的問題,
從其解答者的回答中知道了問題點,
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
留言列表