Time of Update: 2018-12-06
1。gcc包含的c/c++編譯器 gcc,cc,c++,g++,gcc和cc是一樣的,c++和g++是一樣的,一般c程式就用gcc編譯,c++程式就用g++編譯 2。gcc的基本用法 gcc test.c這樣將編譯出一個名為a.out的程式 gcc test.c -o test這樣將編譯出一個名為test的程式,-o參數用來指定產生程式的名字 3。為什麼會出現undefined reference to 'xxxxx'錯誤?
Time of Update: 2018-12-06
使用popen庫函數的版本: #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <limits.h> #define BUFSZ PIPE_BUF void err_quit(char *msg); int main(int argc, char *argv[])
Time of Update: 2018-12-06
在gstreamer的源碼中,看到了GST_BOILERPLATE_FULL宏的定義,原來在這個宏中就定義著_base_init, _init, _class_init這些函數的原型,難怪我們的源碼中不需要定義這些函數原型呢,而且這個宏中最重要的就是可以說明我們的plugin是繼承自哪個 class的(看GObject的相關內容),而且這個宏最重要的就是調用了gst_type_register_static_full函數,將 _base_init, _init,
Time of Update: 2018-12-06
stdout和stderr都是UNIX/Linux系統兩個內建的檔案,他們和stdin一起,在每個進程啟動後都會自動產生,編號分別是0、1、2 這裡需要說明的是,對於stdout,這是一個有Buffer存在的檔案流,也就是說,輸出到stdout的字串可能不會被立即就顯示出來,所以,對於stdout,可以是用fflush(stdout)這樣的方法來強制輸出 而stderr不同,由於輸出的是錯誤資訊,所以,輸出到stderr的字串都會被立即顯示
Time of Update: 2018-12-06
gtk_widget_realize這個函數是用來建立該widget對應的GdkWindow和相關資源的。一般我們用不到這個函數,一般是在建立自訂的widget的時候,需要用到。 我們一般不需要使用這個函數的原因是:當我們調用gtk_widget_show_all函數的時候,就會自動調用這個函數。但是 Foundations of GTK+ Developing一書中提到,對於GtkEventBox,_show_all函數並不會調用realize,所以我們需要手動調用一次這個函數。而
Time of Update: 2018-12-06
rtspplayer這個程式在手機上啟動並執行時候,要使用fbsink來作為video sink組件。這是使用了framebuffer的一個video sink組件。所以在代碼中,很自然只需要在gst_element_factory_make的時候將xvimagesink換成fbsink就可以 了。但是程式在scratchbox中編譯了之後,傳到了手機上,運行卻發生錯誤,報告說: No such element ...... `fbsink'
Time of Update: 2018-12-06
透明位元影像的顯示 包含透明色的位元影像的繪製方法有多種,最簡單的方法是調用現成的函數: TransparentBlt,也可以通過自己的代碼實作類別似TransparentBlt的功能,實現過程也有兩種形式,一種是事先做一張掩碼位元影像,另 一種是動態產生掩碼位元影像。本文將介紹動態產生掩碼位元影像繪製具有透明地區位元影像的方法。 一、TransparentBlt 函數的使用 TransparentBlt 函數在Windows98/Windows2000以上版本運行,系統中需要包含
Time of Update: 2018-12-06
exec函數組有六個函數,分別是: #include <unistd.h> extern char **environ; int execl(const char *path, const char *arg, ...); int execlp(const char *file, const char *arg, ...); int execle(const char *path, const char *arg , ..., char * const envp[]);
Time of Update: 2018-12-06
來自interview的一個考題,所以寫了一個測試程式來demonstrate一下。 func是一個函數指標,該函數傳回值是int,沒有輸入參數;然後主程式中聲明了一個函數指標myFuncPointer,該函數指標代表的函 數輸入參數是一個int,傳回值也是一個函數指標,類型就是func類型的。所以我們可以把func2這個函數賦給myFuncPointer這個指標。 interview的題目要的就是myFuncPointer這個指標的聲明。
Time of Update: 2018-12-06
1. GtkHBox/GtkVBox的gtk_box_pack_start函數中的expand和fill兩個參數的區別: expand就是當Box給我們的widget分配了額外的空間後,我們的widget會佔住這個空間,不會讓給別人。 fill就是當expand為TRUE的時候,我們不僅佔用Box給我們分配的空間,而且會把自己的介面擴大到這個空間上。 所以,簡單來說,expand=TRUE,
Time of Update: 2018-12-06
通過windows via C/C++,知道了kernel object,也知道了用完了kernel object之後,要調用CloseHandle。這個函數的作用就是將該kernel object的usage count - 1,當這個count為0的時候,該kernel object會變成signal狀態/銷毀。 kernel object是不屬於process的,是屬於windows核心的。process只有一個kernel object handle
Time of Update: 2018-12-06
區別很簡單,看這兩個函數的man手冊就能看的出來。簡單來說,memmove是把一堆byte從src移到dst,memcpy是把一堆byte從 src拷貝到dst,最大不同的是:memmove是先把一堆byte拷貝到一個臨時的array中,然後再把這個臨時的array寫到dst中去;而 memcpy沒有這個邏輯,直接就是從src一個一個位元組的讀,同時往dst一個一個位元組的寫。這樣就導致了一個最根本的不同: memcpy不適合或者說不能處理src和dst兩塊記憶體有重疊(overlap)的情況。
Time of Update: 2018-12-06
比如有這麼一個map:map<TCHAR *, TCHAR *> map1;這樣當往map1中插入資料的時候,key是一個指標。在SDClient中,我們將文本資源讀入一個map,然後將來使用literal的文本key字串來將value取出,從而達到國際化的目的。但是這裡有一個問題就是,由於key是一個指標,所以當我們嘗試用literal的TCHAR *來取出value時,發現value取不出來。這是因為插入資料時候的TCHAR *和我們取的時候的TCHAR
Time of Update: 2018-12-06
Mesa is a 3-D graphics library with an API which is very similar to that of OpenGL. To the extent that Mesa utilizes the OpenGL command syntax or state machine, it is being used with authorization from SGI. While Mesa is not a licensed OpenGL
Time of Update: 2018-12-06
判斷一個字串是否是一個整型數或浮點數 兩個函數:isNum-判斷是否是一個整型數 isFloat-判斷是否是一個浮點數 代碼: Code: Select allbool CUtility::isNum(CString csInput){//將字串一個一個字元拆出來判斷是否是數字char cTemp;int nStringLength = csInput.GetLength();bool bReturnValue = true;for (int nLoopindex = 0;
Time of Update: 2018-12-06
GtkButton繼承自GtkBin,所以,要想做image button,特簡單。如果是只需要放上一個image的button,如下: GtkWidget *hbox, *playbtn, *pausebtn, *stopbtn, *placeholder, *dlabel; GtkWidget *playimg, *pauseimg, *stopimg; hbox = gtk_hbox_new(FALSE, 5); playbtn =
Time of Update: 2018-12-06
MSDN中說,__FILE__宏展開後是表示源檔案的名字。如果在編譯選項中加入/FC,那麼,出來的源檔案的名字就包含全路徑,否則,名字就包含相對路徑。很顯然,我們希望名字包含相對路徑,全路徑太長,看起來太累。所以,在visual studio中,項目屬性設定中,最後的編譯命令列中我check了一下,沒有發現/FC。但是奇怪的是程式啟動並執行時候,發現__FILE__出來的源檔案照樣包含全路徑。google 一下,發現了原因:/ZI
Time of Update: 2018-12-06
1、首先需要include一個檔案,如下: #include <tlhelp32.h> 2、參看以下代碼: Code: Select all //遍曆系統所有進程,殺死聯眾世界HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);PROCESSENTRY32 *info = new PROCESSENTRY32;info->dwSize = sizeof(PROCESSENTRY32);
Time of Update: 2018-12-06
SDClient中,使用HeapAlloc分配了一塊記憶體,用來存放從text resource file中讀出的內容。然後接著會使用_tcstok_s來使用\n作為token來split這個大字串。那 為什麼在分配記憶體的時候,要多分配一個字元的記憶體呢?很簡單,這個字元要存放一個\0。因為text resource file檔案的最後沒有\0,所以,當把text resource
Time of Update: 2018-12-06
strsafe.h不能在windows.h, tchar.h, 包括很多C++的標頭檔,比如<map>,之前被include。否則編譯的時候就會報windows.h, tchar.h, winbase.h...這些標頭檔中定義錯誤,或是重複定義。 所以,安全的做法是: 1. 在cpp檔案中include <strsafe.h>,因為一般要include這個檔案,都是要使用StringCch*函數,這些函數的使用一般都是在cpp中。 2.