2007年12月20日 星期四

VC6 to VC2005 問題1

把VC6的project搬到vc2005上build,出現了一堆error

Compiling...StdAfx.cpp WINVER not defined. Defaulting to 0x0502 (Windows Server 2003)C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock2.h(112) : error C2011: 'fd_set' : 'struct' type redefinition C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock.h(54) : see declaration of 'fd_set'C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock2.h(147) : warning C4005: 'FD_SET' : macro redefinition C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock.h(88) : see previous definition of 'FD_SET'C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock2.h(156) : error C2011: 'timeval' : 'struct' type redefinition C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock.h(97) : see declaration of 'timeval'C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock2.h(212) : error C2011: 'hostent' : 'struct' type redefinition C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock.h(153) : see declaration of 'hostent'C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock2.h(225) : error C2011: 'netent' : 'struct' type redefinition C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock.h(166) : see declaration of 'netent'C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock2.h(232) : error C2011: 'servent' : 'struct' type redefinition C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock.h(173) : see declaration of 'servent'C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock2.h(244) : error C2011: 'protoent' : 'struct' type redefinition C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock.h(185) : see declaration of 'protoent'C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock2.h(400) : error C2011: 'sockaddr_in' : 'struct' type redefinition C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock.h(321) : see declaration of 'sockaddr_in'C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock2.h(410) : error C2011: 'WSAData' : 'struct' type redefinition C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock.h(331) : see declaration of 'WSAData'C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock2.h(470) : warning C4005: 'SO_DONTLINGER' : macro redefinition C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock.h(411) : see previous definition of 'SO_DONTLINGER'C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock2.h(527) : warning C4005: 'AF_IPX' : macro redefinition C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock.h(469) : see previous definition of 'AF_IPX'C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock2.h(555) : warning C4005: 'AF_MAX' : macro redefinition C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock.h(488) : see previous definition of 'AF_MAX'C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock2.h(561) : error C2011: 'sockaddr' : 'struct' type redefinition C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock.h(494) : see declaration of 'sockaddr'C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock2.h(601) : error C2011: 'sockproto' : 'struct' type redefinition C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock.h(503) : see declaration of 'sockproto'C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winsock2.h(640) : error C2011: 'linger' : 'struct' type redefinition ..........................
- 99 error(s), 19 warning(s)


最後發現主要問題是沒有include winsock2.h, include在winsock.h之前或是把winsock拿掉只includewinsock2都可以

2007年11月26日 星期一

install shield 2008在vista上碰到得問題

http://community.macrovision.com/showthread.php?t=166798
我碰到的錯誤訊息跟上述狀況有類似的錯誤訊息
"Unable to save file C:\Windows\Downloaded Installations\..."
在Install Designer下的prepare to release中的release
中間的樹狀圖點single image
右邊會跑出一堆設定
選setup.exe tab
在cache path那邊把[WindowsFolder]改成[LocalAppDataFolder]

2007年11月12日 星期一

卡很久的OnPaint問題...

之前playlist那頁一直有tooltip不會消失 about dialog被擋住之類的問題
原因是要加print screen圖的時候
發現圖片不會重畫(例如切換到別的視窗再切回來圖就被蓋掉)
就在ONPAINT中加入重畫的程式
不過這樣卻造成第一行的BUG
連text都有手動加以更新才不會在換頁時被蓋掉
最後發現問題在重寫WTL的onpaint的時候沒有做beginpaint和endpaint的動作
在onpaint第一行加入CPaintDC就解決了這問題
它在constructor和destructor會自動幫我們呼叫beginpaint和endpaint
用wizard加入onpaint的時候並不會幫我們補上
要自己手動加入

2007年10月31日 星期三

2007年8月1日 星期三

CEdit自動換行

  • 要用enter換行要加入want return屬性
    如果要碰到邊界自動換行則要加入
    Multiline
    Want return
    並且把 Auto HScroll屬性拿掉(這行有問題,不拿掉也可以成功,當初為啥要加這行?)

2007年6月27日 星期三

???

CListViewCtrl的 InsertItem(&lvi)
除了宣告LVITEM物件外
還要攔LVN_GETDISPINFO
確定的流程還要研究

2007年4月23日 星期一

DeleteDir

TCHAR temp[MAX_PATH]={0};
_tcscpy(temp,path);
temp[path.GetLength()+1]=NULL;
SHFILEOPSTRUCT fo;
int nSuccessCode=0;
ZeroMemory(&fo, sizeof(fo));
fo.fFlags = FOF_ALLOWUNDO + FOF_NOCONFIRMATION + FOF_SILENT;
fo.wFunc = FO_DELETE; // delete contents of this folder
fo.pFrom = (LPCTSTR)temp;
fo.pTo = NULL;
nSuccessCode = SHFileOperation(&fo);
return nSuccessCode;

最後的return值在某種情況下會是1026(失敗)
搞了半天才發現不能是\結尾 把\拿掉就好了
網路上其他人碰到的狀況則多是字串沒有以兩個NULL做結尾

2007年3月23日 星期五

修改resource.h

如果要修改裡面的數值
例如 #define IDC_1111 999 改成 777
要clean solution再重build才會起作用
極小的tip

2007年3月20日 星期二

atoi

CString str;
int x;
x=atoi(str);
錯誤訊息顯示無法將CString 轉成const char*
摸半天才發現是TCHAR的問題
要改用_wtoi

2007年3月19日 星期一

Static

本來想用extern變數來做class間的變數傳遞
方法是在一開始使用或宣告的file中宣告在function之外
其他的file或class想要共用就加extern來共用此變數
不過用全域變數可能造成日後程式混亂
後來決定用static variable
方法是在欲初始的class中宣告static member variable
要改變static variable的值必須要用static function
一樣先宣告為member 才能存取member variable
接下來要先在file中所有function外重新宣告
CLASS::變數=xx 才會完成變數初始化 在記憶體中分配區塊給它

Static

本來想用extern變數來做class間的變數傳遞
方法是在一開始使用或宣告的file中宣告在function之外
其他的file或class想要共用就加extern來共用此變數
不過用全域變數可能造成日後程式混亂
後來決定用static variable
方法是在欲初始的class中宣告static member variable
要改變static variable的值必須要用static function
一樣先宣告為member 才能存取member variable
接下來要先在file中所有function外重新宣告
CLASS::變數=xx 才會完成變數初始化 在記憶體中分配區塊給它

2007年3月2日 星期五

http://support.microsoft.com/kb/822332/en-us

VC7碰到的bug 目前還沒找到方法解決
只有先用手動加入
手動加入variable分兩部驟
1.宣告一個member variable
2.在DoDataExchange中加入DDX_Control(pDX, IDC_RADIO_PRO2, m_radio_pro2);

2007年1月15日 星期一

Precpompiled Header

VC6灌了SP6就出現error
後來發現似乎是對precompile header檢查更嚴格
一定要加在第一行
把所有cpp都改過compile就行了

2007年1月14日 星期日

筆記

__try , __finally的行為會隨著版本同而改變
__finally執行完不一定會跳出目前迴圈
使用上要注意


如果利用new array[xx]分配記憶體位置
要用delete[]