Search Google

Thursday, November 29, 2007

function pointer type


typedef HINSTANCE (__stdcall *PFreeLibrary)( HINSTANCE );


以上是宣告function pointer type的範例,
PGetProcAddress是指到接受HMODULE, LPCSTR,產出FARPROC型態變數的變數指標

使用時
PGetProcAddress SomeFuncPtr;
SomeFuncPtr = AnotherFunc;

AnotherFunc的實做為
HINSTANCE AnotherFunc(HMODULE aa, LPCSTR bb) {...}

Monday, November 26, 2007

Visual Studio 2008 Setup - Part1

最近與VS2005奮戰許久之後依舊無法克服部份WinAPI的困擾讓我決定啟用VS2008,沒想到一裝好之後之前遇到的問題通通不見了!
只是愈到了一個新的問題,那就是不知道該如何debug(以前都用gdb),稍微摸索之後終於讓我找到解決之道,下面是一些設定的screenshots。



[1] & [2]記得填寫


Saturday, November 24, 2007

gcc還是在Linux下用會比較好

最近在Windows上使用MinGW時遇到幾個挫敗:
1. 總是無法順利呼叫叫做SendInput的Win32 API,總是給我類似這樣的錯誤訊息

C:\Documents and Settings\user\My Documents\code\api_sendinput>make
gcc -I. -IC:\MinGW\include -g -mwindows -o api_sendinput.exe api_sendinput.o -
Wall -LC:\MinGW\lib -Lc:\MinGW\bin -luser32
api_sendinput.o: In function `main':
C:/Documents and Settings/user/My Documents/code/api_sendinput/api_sendinput.c:5
3: undefined reference to `SendInput'
collect2: ld returned 1 exit status
make: *** [api_sendinput.exe] Error 1

2. 今天寫了一個程式parse掃毒程式產生的Log file,執行後跟沒執行一樣,於是使用gdb除錯,進入gdb後我用set args給參數之後還沒設break point就馬上開始執行,結果跑出來的卻是正確的結果,同樣的src code丟到lab server上編譯過後執行的再正常不過。

所以gcc還是比較適合在Linux下使用。。。
話說從gcc轉換到VC++原來還是有overhead,原本gcc編譯的好好的code丟到VC++裡編譯的結果執行總是怪怪的,經過研究之後把#define換成宣告global variable才正常,而且有時候使用#define還會產生error,使用linux的list.h時就是一個例子。

現在電腦中的開發環境亂成一團,自己都快搞糊塗了,看來下星期再回覆重新來過吧!

Sunday, November 11, 2007

完成第一支使用win32 api的程式

今天完成了我生平第一支使用win32 api的程式,我叫他做autop2p!
他的作用是控制滑鼠、鍵盤讀取檔案中的關鍵字,一一丟進p2p軟體的搜尋欄位後按下搜尋紐進行搜尋,過程中家齊學長在尋找適合的API方面幫了我很大的忙。
同時學到window handle與process handle雖然都是HWND type,但是是兩碼子事。
也在msdn上看到使用fscanf()一次scan一整行的方法:

fscanf(fIn, "%[^\n]%*c", keyWordBuf)

總體來說,autop2p的功能算是automate的一個小subset,使用automate多年之後總算也知道它是怎做出來的了!

Thursday, November 08, 2007

command for removing windows messenger

RunDll32 advpack.dll,LaunchINFSection %windir%\INF\msmsgs.inf,BLC.Remove

undefined reference to '_GetProcessId'

Got the w32api package installed in Cygwin, but the build process still doesn't go through.

w32api package installed

compilation error

Wednesday, November 07, 2007

cygwin's clear

安裝ncurses lib之後就可以在cygwin下執行clear清除畫面。
安裝路徑為:Libs --> ncurses
可以順道一起將libncurses*也裝起來 :-)

run DDD in cygwin

利用

x -multiwindow &
開啟x-server,
之後要記得
export DISPLAY=localhost:0
因為開啟x-server時預設的display是0,
接下來就可以快快樂樂的輸入
ddd &
開啟並使用ddd了。

Tuesday, November 06, 2007

mingw + winapi

古人云:小人恆立志
果然一點也沒錯!
今天學長告知隊上使用的p2p不只一種的同時也建議研究一下winapi,
這樣只需要寫一個程式就可以控制多個p2p clients讓他們自動搜尋,
於是乎,我將改寫使用Java的LimeWire計畫置一旁,開始研究起winapi來,
又因為手上這台電腦的記憶體實在太少(256MB - 內建顯卡 = 240MB),
安裝VS系列可能會跑到死,所以決定走cygwin/mingw路線。
這個連結就是使用mingw編出呼叫winapi的執行檔introduction~
沒想到最後還是要碰以前打死都不想看的winapi@@