• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Error

            C++博客 首頁 新隨筆 聯系 聚合 管理
              217 Posts :: 61 Stories :: 32 Comments :: 0 Trackbacks

            #

            // boost_singal_solt.cpp : Defines the entry point for the console application.
            //
            #include "stdafx.h"
            #include <iostream>
            #include <string>
            #include <boost/signals2.hpp>
            class CTarget /*: public boost::signals2::trackable*/
            {
            public:
                virtual ~CTarget()
                {
                    std::cout << __FUNCTION__ << std::endl;
                }
                CTarget()
                {
                    m_strMsg = "1343rwkjdfkjdfasdklf";
                }
                void SomeHandle()
                {
                    std::cout << __FUNCTION__ << std::endl;
                    std::cout << m_strMsg << std::endl;
                }
                void SomeHandle1()
                {
                    std::cout << __FUNCTION__ << std::endl;
                }
            private:
                std::string m_strMsg;
            };
            class CSource
            {
            public:
                boost::signals2::connection Connect(const boost::signals2::signal<void(void)>::slot_type &sub)
                {
                    return m_sig.connect(sub);
                }
                void OnSig()
                {
                    m_sig();
                }
            private:
                boost::signals2::signal<void(void)> m_sig;
            };
            int _tmain(int argc, _TCHAR* argv[])
            {
                CSource source;
                boost::signals2::connection conn;
                {
                    CTarget target;
                    
                    /*conn = */source.Connect(boost::bind(&CTarget::SomeHandle, &target));
                    source.Connect(boost::bind(&CTarget::SomeHandle1, &target));
                    source.OnSig();
                }
                source.OnSig();
            return 0;
            }


            在繼承boost::signals2::trackable的情況下,Target析構以后不會調用,但是不繼承是會調用的。也就是說,這是一個危險操作,不知道內部怎么管理的,會不會出現內存泄漏?
            /////////////////////////////////////////////////////////////////////////////


            // boost_singal_solt.cpp : Defines the entry point for the console application.
            //
            #include "stdafx.h"
            #include <iostream>
            #include <string>
            #include <boost/signals2.hpp>
            class CSource
            {
            public:
                boost::signals2::connection Connect(const boost::signals2::signal<void(void)>::slot_type &sub)
                {
                    return m_sig.connect(sub);
                }
                void OnSig()
                {
                    m_sig();
                }
            private:
                boost::signals2::signal<void(void)> m_sig;
            };
            class CTarget : public boost::signals2::trackable
            {
            public:
                virtual ~CTarget()
                {
                    std::cout << __FUNCTION__ << std::endl;
                    m_con.disconnect();
                }
                CTarget()
                {
                    m_strMsg = "1343rwkjdfkjdfasdklf";
                }
                void RegisterSolts(CSource& source)
                {
                    m_con = source.Connect(boost::bind(&CTarget::SomeHandle, this));
                }
                void SomeHandle()
                {
                    std::cout << __FUNCTION__ << std::endl;
                    std::cout << m_strMsg << std::endl;
                }
                void SomeHandle1()
                {
                    std::cout << __FUNCTION__ << std::endl;
                }
            private:
                std::string m_strMsg;
                boost::signals2::connection m_con;
            };
            int _tmain(int argc, _TCHAR* argv[])
            {
                CSource source;
                boost::signals2::connection conn;
                {
                    CTarget target;
                    
                    target.RegisterSolts(source);
                    //source.OnSig();
                }
                source.OnSig();
            return 0;
            }
            確認只要維護好connection在對象target析構以后一定是disconnect應該就OK沒事,,,





            ///////////////////////////////////////////


            整體上看來是這樣:
            問題:target的成員函數和this指針打包注冊到source上以后,如果target析構,source無法感知到,可能會調用已經成為野指針的target地址。
            解決:signals2庫的解決辦法是,用一個connection來維護打包的target成員函數和source上的signal的連接關系。target持有這個connection,當自身析構的時候必須調用disscontion解除這個關系。

            如果要抄襲,也是要設計一種機制,在target析構的時候,想辦法清除它在別處注冊的函數指針。
            1.可以建立target到source的關系,target析構以后通知source,souce清理自身保留的target相關打包函數。這種方式在使用boost bind的時候可能就有問題了,應為之依靠target指針去判斷bind出來的function有難度。
            2.建立關系的時候就將解除關系的函數打包到一個新的對象中,然后由target負責在自己析構的時候去調用它。

            !!!如果source先于target析構,就悲劇了。但是實際情況是,如果source已經析構了,也無法觸發target綁定的函數了。但問題是,target析構的時候還是去觸發source綁定到target的解除關系的函數。悲催。但是實際測試這個問題不存在,估計是用類似weak_ptr的技術。
            在完全理解之前,務必保證source生命周期大于target
            // boost_singal_solt.cpp : Defines the entry point for the console application.
            //
            #include "stdafx.h"
            #include <iostream>
            #include <string>
            #include <boost/signals2.hpp>
            class CSource
            {
            public:
                boost::signals2::connection Connect(const boost::signals2::signal<void(void)>::slot_type &sub)
                {
                    return m_sig.connect(sub);
                }
                void OnSig()
                {
                    m_sig();
                }
            private:
                boost::signals2::signal<void(void)> m_sig;
            };
            class CTarget : public boost::signals2::trackable
            {
            public:
                virtual ~CTarget()
                {
                    //std::cout << __FUNCTION__ << std::endl;
                    m_con.disconnect();
                }
                CTarget()
                {
                    m_strMsg = "1343rwkjdfkjdfasdklf";
                }
                void RegisterSolts(CSource& source)
                {
                    m_con = source.Connect(boost::bind(&CTarget::SomeHandle, this));
                }
                void SomeHandle()
                {
                    std::cout << __FUNCTION__ << std::endl;
                    std::cout << m_strMsg << std::endl;
                }
                void SomeHandle1()
                {
                    std::cout << __FUNCTION__ << std::endl;
                }
            private:
                std::string m_strMsg;
                boost::signals2::connection m_con;
            };
            int _tmain(int argc, _TCHAR* argv[])
            {
                for (;;)
                {
                    CSource* pSource = new CSource;
                    boost::signals2::connection conn;
                    CTarget* pTarget = new CTarget;
                    pTarget->RegisterSolts(*pSource);
                    delete pSource;
                    delete pTarget;
                }
                //source.OnSig();
            return 0;
            }

            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

            沒有完全讀明白之前,在需要7×24運行的環境還是慎重使用。不過客戶端貌似無所謂,,,囧。
            posted @ 2014-05-30 01:09 Enic 閱讀(791) | 評論 (0)編輯 收藏

            外部lib
            add_library(baz STATIC IMPORTED) set_target_properties(baz PROPERTIES IMPORTED_LOCATION_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/libbaz.a IMPORTED_LOCATION_DEBUG ${CMAKE_CURRENT_SOURCE_DIR}/libbazd.a) add_library(bar STATIC IMPORTED) set_target_properties(bar PROPERTIES IMPORTED_LOCATION_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/libbar.a IMPORTED_LOCATION_DEBUG ${CMAKE_CURRENT_SOURCE_DIR}/libbard.a IMPORTED_LINK_INTERFACE_LIBRARIES baz) # <-- dependency is here

            注意動態庫和靜態庫稍有區別:
             add_library(bar SHARED IMPORTED)
             set_property(TARGET bar PROPERTY IMPORTED_LOCATION c:/path/to/bar.dll)
             set_property(TARGET bar PROPERTY IMPORTED_IMPLIB c:/path/to/bar.lib)
             add_executable(myexe src1.c src2.c)
             target_link_libraries(myexe bar)


            內部lib直接寫target name就OK,但是必須在同一個proj下

            還有一種方式
            TARGET_LINK_LIBRARIES(skiaSampleCode 
            debug skiaCored.lib
                    optimized skiaCore.lib)



            PROJECT_SOURCE_DIR  CMAKE_CURRENT_SOURCE_DIR  CMAKE_SOURCE_DIR 注意這三者的區別
            posted @ 2014-05-15 23:40 Enic 閱讀(8358) | 評論 (0)編輯 收藏

            實際起作用的是WS_EX_TOPMOST屬性,添加這個屬性的方式有三種:
            1.在Create階段的Ex參數添加
            2.在創建完成后通過SetWindowLongPtr添加(SetWindowLong已經不建議使用)。但是我用的時候發現加不上,好像ModifyWindowStyle這個MFC的函數可以,,,
            3.通過
            ::SetWindowPos(m_hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);添加

            ::SetWindowPos(m_hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
            //SetWindowLongPtr(m_hWnd, GWL_EXSTYLE, 
            // GetWindowLongPtr(m_hWnd, GWL_EXSTYLE) | WS_EX_TOPMOST);
            posted @ 2014-04-24 15:42 Enic 閱讀(303) | 評論 (0)編輯 收藏

            Q1:什么是 DOM?
            DOM 是 W3C(萬維網聯盟)的標準。
            DOM 定義了訪問 HTML 和 XML 文檔的標準:
            W3C DOM 標準被分為 3 個不同的部分:
            核心 DOM - 針對任何結構化文檔的標準模型
            XML DOM - 針對 XML 文檔的標準模型
            HTML DOM - 針對 HTML 文檔的標準模型
            Q2:什么是 XML DOM?
            XML DOM 定義了所有 XML 元素的對象和屬性,以及訪問它們的方法。
            Q3:什么是 HTML DOM?
            HTML DOM 是:
            HTML 的標準對象模型
            HTML 的標準編程接口
            HTML DOM 定義了所有 HTML 元素的對象和屬性,以及訪問它們的方法。
            換言之,HTML DOM 是關于如何獲取、修改、添加或刪除 HTML 元素的標準。
            Q4:DOM標準與IE的html事件模型區別
            先有事件,事件是在瀏覽器內部自動產生的,當有時間發生時,html元素會向外界發出各種事件。
            DOM事件流,當一個html元素產生一個事件時,該事件會在元素借點與根節點之間的路徑傳播,路徑所經過的節點都會收到該事件,這個傳播過程可稱為DOM事件流。
            主流瀏覽器的事件模型:
            1)冒泡型事件
            從DOM樹型結構上理解,就是事件由葉子結點沿祖先結點一直向上傳遞直到根結點;從瀏覽器界面視圖HTML元素排列層次上理解就是事件由具有從屬關系的最確定的目標元素一直傳遞到最不確定的目標元素.
            2)捕獲型事件
            由DOM樹最頂層元素一直到最精確的元素
            3)DOM標準事件模型
            DOM標準支持捕獲型與冒泡型,可以說是它們兩者的結合體。它可以在一個DOM元素上綁定多個事件處理器,并且在處理函數內部,this關鍵字仍然指向被綁定的DOM元素,另外處理函數參數列表的第一個位置傳遞事件event對象。
            首先是捕獲式傳遞事件,接著是冒泡式傳遞,所以,如果一個處理函數既注冊了捕獲型事件的監聽,又注冊冒泡型事件監聽,那么在DOM事件模型中它就會被調用兩次。
            Q5:DOM事件響應綁定
            1)綁定單個監聽
            element.attachEvent("OnClick", observer)
            element.detachEvent("OnClick", observer)
            2)綁定多個監聽
            element.AddEventListener("Click", observer, useCapture)
            element.RemoveEventListener("Click", observer, useCapture)
            第三個參賽是指定在冒泡節點還是控制階段調用
            posted @ 2014-04-18 15:44 Enic 閱讀(414) | 評論 (0)編輯 收藏

            之前一直很抗拒使用gyp等待chrominu,喜歡cmake。但是不使用chromium工具鏈去編譯,分析chromium確實非常痛苦啊,,,
            好在這幾天網絡環境好,成功按照http://www.chromium.org/developers/how-tos/build-instructions-windows#TOC-Building-Chromium創建了編譯環境。
            不多大部分細節都不知道,沒辦法的事情。最終還是要自己理解整個工程才OK啊

            gyp工具用法
            例子:tools\gyp\gyp.bat --depth . -D component=shared_library --no-circular-check -G msvs_version=2008 -Ibuild/common.gypi build_add/all.gyp
            添加參數用-D
            Building in Visual Studio
            You can use:
                set GYP_GENERATORS=msvs-ninja,ninja
            and then
                    gclient runhooks
            gclient sync --force
            Usage: gyp-script.py [options ...] [build_file ...]
            Options:
              -h, --help            show this help message and exit
              --build=CONFIGS       configuration for build after project generation
              --check               check format of gyp files
              --config-dir=CONFIG_DIR
                                    The location for configuration files like
                                    include.gypi.
              -d DEBUGMODE, --debug=DEBUGMODE
                                    turn on a debugging mode for debugging GYP.  Supported
                                    modes are "variables", "includes" and "general" or
                                    "all" for all of them.
              -D VAR=VAL            sets variable VAR to value VAL
              --depth=PATH          set DEPTH gyp variable to a relative path to PATH
              -f FORMATS, --format=FORMATS
                                    output formats to generate
              -G FLAG=VAL           sets generator flag FLAG to VAL
              --generator-output=DIR
                                    puts generated build files under DIR
              --ignore-environment  do not read options from environment variables
              -I INCLUDE, --include=INCLUDE
                                    files to include in all loaded .gyp files
              --msvs-version=MSVS_VERSION
                                    Deprecated; use -G msvs_version=MSVS_VERSION instead
              --no-circular-check   don't check for circular relationships between files
              --parallel            Use multiprocessing for speed (experimental)
              -S SUFFIX, --suffix=SUFFIX
                                    suffix to add to generated files
              --toplevel-dir=DIR    directory to use as the root of the source tree
            posted @ 2014-04-08 23:44 Enic 閱讀(351) | 評論 (0)編輯 收藏

            問題:我在視圖畫的圖象或者文字,當窗口改變后為什么不見了?OnDraw()OnPaint()兩個都是解決上面的問題,有什么不同?

            答:OnDraw()OnPaint()好象兄弟倆,因為它們的工作類似。
            至于不見了的問題簡單,因為當你的窗口改變后,會產生無效區域,這個無效的區域需要重畫。一般Windows會發送兩個消息WM_PAINT(通知客戶區 有變化)和WM_NCPAINT(通知非客戶區有變化)。非客戶區的重畫系統自己搞定了,而客戶區的重畫需要我們自己來完成。這就需要OnDraw() OnPaint()來重畫窗口。

            OnDraw()
            OnPaint()有什么區別呢?首先:我們先要明確CView類派生自CWnd類。而OnPaint()CWnd的類成員,同時負責響應WM_PAINT消息。OnDraw()CVIEW的成員函數,并且沒有響應消息的功能。這就是為什么你用VC成的程序代碼時,在視圖類只有 OnDraw沒有OnPaint的原因。

            其次,要想在屏幕上繪圖或顯示圖形,首先需要建立設備環境DC。其實DC是一個數據結構,它包含輸 出設備(不單指你17寸的純屏顯示器,還包括打印機之類的輸出設備)的繪圖屬性的描述。MFC提供了CPaintDC類和CWindwoDC類來實時的響 應,而CPaintDC支持重畫。

            當視圖變得無效時(包括大小的改變,移動,被遮蓋等等),Windows WM_PAINT 消息發送給它。該視圖的 OnPaint 處理函數通過創建 CPaintDC 類的DC對象來響應該消息并調用視圖的 OnDraw 成員函數。通常我們不必編寫重寫的 OnPaint 處理成員函數。

            ///CView
            默認的標準的重畫函數

            void CView::OnPaint()
            {
                CPaintDC dc(this);
                OnPreparDC(&dc);
                OnDraw(&dc); //調用了OnDraw
            }


            既然OnPaint最后也要調用OnDraw,因此我們一般會在OnDraw函數中進行繪制。下面是一個典型的程序

            ///視圖中的繪圖代碼首先檢索指向文檔的指針,然后通過DC進行繪圖調用。
            void CMyView::OnDraw( CDC* pDC )

                CMyDoc* pDoc = GetDocument(); 
                CString s = pDoc->GetData(); // Returns a CString
                CRect rect;
                GetClientRect( &rect ); 
                pDC->SetTextAlign( TA_BASELINE | TA_CENTER ); 
                pDC->TextOut( rect.right / 2, rect.bottom / 2, s, s.GetLength() );
            }

            最后:現在大家明白這哥倆之間的關系了吧。因此我們一般用OnPaint維護窗口的客戶區(例如我們的窗口客戶區加一個背景圖片),用OnDraw維護視圖的客戶區(例如我們通過鼠標在視圖中畫圖)。當然你也可以不按照上面規律來,只要達到目的并且沒有問題,怎么干都成。

            補充:我們還可以利用Invalidate(),ValidateRgn(),ValidateRect()函數強制的重畫窗口

             

            posted @ 2014-03-10 18:12 Enic 閱讀(250) | 評論 (0)編輯 收藏

            如果使用了腳本,那么最終的事件應該是由:CCLuaEngine::executeEvent分發出去的,他應該是利用lua的一些機制綁定了對象和處理函數。


            在腳本側,用類似:
            menuPopupItem:registerScriptHandler(menuCallbackExit)

            menuLayer:setTouchEnabled(true)
                menuLayer:registerScriptTouchHandler(onTouch)

                    layerFarm:registerScriptTouchHandler(onTouch)
                    layerFarm:setTouchEnabled(true)
            這樣的代碼來設定事件響應處理函數


            猜測一下,當以腳本模式運行的時候如果事件發生了,首先檢測發生事件的對象相應的處理腳本函數時候存在,如果存在就直接調用腳本函數
            具體的各種事件類型,和個事件的各種參數以后在來分析吧
            posted @ 2014-03-08 20:47 Enic 閱讀(200) | 評論 (0)編輯 收藏

            int comput(int tmpn)
              int tmpc=0;
               while(tmpn>0)
               {
                 tmpc++;
                 tmpn=tmpn&(tmpn-1)
                }
              return tmpc;
            }




            x=x&(x-1)
            ==============
            以前沒有見過這樣的表達式,分析一下發現發明這個表達式的人是個高手。
            表達式的意思就是把x的二進制表示從最低位直到遇到第一個1的比特置0。
            例如:
            e1:
            x     = 01001000
            x-1   = 01000111
            x&(x-1)=01000000
            e2:
            x     = 01001001
            x-1   = 01001000
            x&(x-1)=01001000

            位運算里有學問呀,
            例如眾所周知的交換算法:
            void swap(int i1, int i2)
            {
                i1 ^= i2;
                i2 ^= i1;
                i1 ^= i2;
            }
            還有,我今天看了Minix操作系統作者寫的《操作系統 設計與實現》(寫的比William Stalling的《操作系統 內核與設計原理》有條理而且清晰緊湊得多,后者內容蕪雜)中的頁面替換算法之一矩陣法,就是用位運算實現的:
            假設內存分為n頁,那么高速緩存一個n x n的比特矩陣,開始時全置0,如下(假設n=4):
              0 1 2 3
            0 0 0 0 0
            1 0 0 0 0
            2 0 0 0 0
            3 0 0 0 0
            每次內存訪問時,如果訪問的是i頁,那么先把矩陣的第i行置1,然后把矩陣的第i列置0,這樣i行的二進制的值越小就表示i頁最長時間最近沒有被訪問。例如假設訪問的次序為0-2-3-1,那么該矩陣的變化過程為:
              0 1 2 3
            0 0 1 1 1    0 1 0 1    0 1 1 0    0 0 1 0
            1 0 0 0 0    0 0 0 0    0 0 0 0    1 0 1 1
            2 0 0 0 0    1 1 0 1    1 1 0 0    1 0 0 0
            3 0 0 0 0    0 0 0 0    1 1 1 0    1 0 1 0
            第三個例子是Windows GDI的二元和三元光柵操作的編碼。比較復雜,就不講了。

            x=x&(x-1); 可以用來求出x是否為2冪次方數;當&的結果為0時,x原值是2冪次方數,否則就不是2冪次方數;
            如x=4時   4: 0000 0100
                    & 3:0000 0011
            得出結果為0 ,是2冪次方數;
            x=5時,  0000 0101
                     0000 0100
            得出結果為1,即非2冪次方數;

            posted @ 2014-02-26 16:55 Enic 閱讀(673) | 評論 (0)編輯 收藏

            GetTextMetrics與GetTextExtent的區別
            GetTextMetrics:獲取當前字體的信息

            GetTextExtent:獲取特定的字符串在屏幕上所占的寬度和高度

            對于這兩個函數的作用,我在編程的時候,也有一定的困惑。因此,我也想,其他人在編程的時候也肯定有 同樣的困惑。所以我把他們解釋一下。不足之處,還請大家多多的添加 批評~~其實,我們對什么困惑呢?函數的調用方法,還是在返回值上?

            CDC::GetTextMetrics

            作用:

            返回當強設備描述表中的當前所用的字體的信息

            函數原型:

            BOOL GetTextMetrics(
               LPTEXTMETRIC lpMetrics 
            ) const;

            參數: 
            lpMetrics (是一個指針)
            返回指向TEXTMETRIC 結構的一個數據。

            返回值:
            非零值成功

            要求: 
            包含頭文件: afxwin.h




            CDC::GetTextExtent
            Call this member function to compute the width and height of a line of text using the current font to determine the dimensions.
            調用這個函數,返回用當前字體寫下的一行字符串的高度和寬度

            函數原型:
            CSize GetTextExtent(
               LPCTSTR lpszString,
               int nCount 
            ) const;

            CSize GetTextExtent(
               const CString& str 
            ) const;

            參數 
            lpszString

            指向一個字符串指針,也可以傳遞一個字符串對象。
            nCount

            指定字符在字符串中的數目
            str

            一個字符串對象,包含指定的字符。
            返回值:

            以邏輯單位返回字符串的尺寸,保存在一個CSize對象中
            posted @ 2014-02-26 13:57 Enic 閱讀(171) | 評論 (0)編輯 收藏

            主要是這個參數起作用說: -mno-cygwin

            嘗試編譯lua的時候發現機器上的mingw32-xy一直傻逼:make: Interrupt/Exception caught (code = 0xc0000005, addr = 0x0x75f843f9)
            感覺上是要重新安裝一下,不過咱機器上有cygwin,,,呵呵

            CC= mingw32-gcc.exe
            CFLAGS= -mno-cygwin -O2 -Wall -DLUA_COMPAT_ALL $(SYSCFLAGS) $(MYCFLAGS)
            LDFLAGS= $(SYSLDFLAGS) $(MYLDFLAGS)
            LIBS= -lm $(SYSLIBS) $(MYLIBS)


            后面編譯glew的時候沒看明白自帶的make,所以就自己修改了下,,,
            mingw32-gcc -mno-cygwin -DGLEW_NO_GLU -O2 -Wall -W -Iinclude -DGLEW_BUILD -o src/glew.o -c src/glew.c
            mingw32-gcc -mno-cygwin -shared -Wl,-soname,libglew32.dll -Wl,--out-implib,lib/libglew32.a -o lib/glew32.dll src/glew.o -L/mingw/lib -lglu32 -lopengl32 -lgdi32 -luser32 -lkernel32


            原文:
            關于ejoy2d應該有不少人關注
            最近看到想編下看看demo,感覺編譯對于用慣ide來說確實有些麻煩,不過嘛
            這樣也好,簡單,方便,不用配置那么多東西,一個make就可以做完,如果調試呢?
            lua寫嘛,網上弄個就可以了,但是如果要寫lua導出函數呢?gdb吧,命令行蠻實在的。
            廢話不多少,下面編譯過程
            readme 需要
            * Install Lua 5.2.3
            * Copy lua52.dll to /usr/local/bin
            * Install glew 1.9
            * make or make mingw
            * ej2d examples/ex01.lua to test
            這個當然是先下載需要的庫了
             glew 1.9 我這里直接用的1.10了 http://glew.sourceforge.net/
             
            由于我電腦用使用codeblock,所以直接使用他
            自帶的mingw吧
            1. 直接命令行下運行codeblock/mingw/mingwvars.bat目錄,設置mingw運行需要的環境
            2. 進
            入lua-5.2.3目錄 mingw32-make mingw 編譯lua
            3. 進入glew-1.10.0目錄
            gcc -DGLEW_NO_GLU -O2 -Wall -W -Iinclude -DGLEW_BUILD -o src/glew.o -c src/glew.c
            gcc -shared -Wl,-soname,libglew32.dll -Wl,--out-implib,lib/libglew32.a -o lib/glew32.dll src/glew.o -L/mingw/lib -lglu32 -lopengl32 -lgdi32 -luser32 -lkernel32
            4. 把lua-5.2.3/src/lua52.dll拷貝到CodeBlocks/MinGW/bin目錄下
                把lua-5.2.3/src/liblua.a拷貝到CodeBlocks/MinGW/lib目錄下,并改名為liblua52.a
                把lua-5.2.3/src/lua.h, lauxlib.h, luaconf.h, lualib.h 拷貝到CodeBlocks/MinGW/include目錄下
                把glew-1.10.0/lib/glew32.dll拷貝到CodeBlocks/MinGW/bin目錄下
                把glew-1.10.0/lib/libglew32.a拷貝到CodeBlocks/MinGW/lib目錄下
                把glew-1.10.0/include/GL/glew.h,glxew.h, wglew.h 拷貝到CodeBlocks/MinGW/include/GL目錄下
            5. 命令行進入ejoy2d目錄 mingw32-make mingw 編譯ejoy2d 一些搞定
             6. 命令行輸入ej2d examples/ex01.lua這樣就可以看到窗口了.
            posted @ 2014-02-25 10:04 Enic 閱讀(1019) | 評論 (0)編輯 收藏

            僅列出標題
            共22頁: First 7 8 9 10 11 12 13 14 15 Last 
            综合久久精品色| 91精品国产高清久久久久久91| 亚洲国产一成人久久精品| 一级做a爰片久久毛片看看| 久久国产精品波多野结衣AV| 一级做a爰片久久毛片免费陪| 久久国产亚洲精品| 色婷婷综合久久久久中文一区二区| 久久亚洲私人国产精品vA| 国产产无码乱码精品久久鸭| 久久国产精品免费一区二区三区| 久久精品国产亚洲AV蜜臀色欲| 国产99久久久久久免费看 | 久久久久亚洲AV成人网| 一本色道久久88加勒比—综合| 久久影院午夜理论片无码| 69国产成人综合久久精品| 亚洲中文精品久久久久久不卡 | 亚洲精品无码专区久久同性男| 久久精品国产亚洲av麻豆色欲| 久久久久久国产a免费观看黄色大片| 久久综合噜噜激激的五月天| 亚州日韩精品专区久久久| 久久高清一级毛片| 99久久人妻无码精品系列蜜桃| 精品国产乱码久久久久软件| 久久99国产一区二区三区| 狠狠色婷婷综合天天久久丁香| 国产精品九九九久久九九| 久久亚洲中文字幕精品一区| 久久久久亚洲精品男人的天堂| 狠狠狠色丁香婷婷综合久久俺| 99久久国产综合精品女同图片| 亚洲日本va午夜中文字幕久久| 国产精品美女久久久免费| 久久精品一区二区| 久久精品国产影库免费看| 久久九九全国免费| 久久91精品综合国产首页| 99久久精品国产综合一区| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 |