• <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

            #

            // 函數重載寫法
             //    (return_arg-type(*)(arg1-type,grg2-type,...))&function
                module(L)
                [
                    def("greet", (void(*)(void))&greet),
              def("greet", (void(*)(long))&greet),
              def("greet", (long(*)(long,float))&greet)
                ];

             // 成員函數重載用法
             // (return_arg-type (classname::*)(arg1-type,grg2-type,...))&classname::class_memberfunction

            posted @ 2014-01-10 11:58 Enic 閱讀(508) | 評論 (0)編輯 收藏

            首先數據庫定位分幾塊:機器名-實例名-數據庫名

            但是安裝完成之后發現連不上08的數據庫,最開始是應為沒有填寫實例名字,后來用ip/實例名還是連不上,但是pcname/實例名能連上。

            排查之后是08的服務器沒有打開tcp/ip
            打開以后發現服務啟動不了,應為端口沖突了,解決以后發現程序能上但是查詢分析器不能上

            查詢分析器連接字符串應該是ip,port/實例




            posted @ 2014-01-08 11:36 Enic 閱讀(184) | 評論 (0)編輯 收藏

            #include <iostream>
            extern "C"
            {
            #include "lua.h"
            #include "lauxlib.h"
            #include "lualib.h"
            }
            #include <luabind/luabind.hpp>
            using namespace luabind;
            class TestClass
            {
            public:
            TestClass(int a,int b);
            static TestClass* Singleton();
            int add();
            virtual void ShowTest(std::string& strMsg);
            private:
            static TestClass* mSingleton;
            int __a,__b;
            };
            void TestClass::ShowTest(std::string& strMsg)
            {
            std::cout << __FUNCTION__ << std::endl;
            std::cout << strMsg.c_str() << std::endl;
            strMsg += "000";
            }
            TestClass* TestClass::mSingleton = NULL;
            TestClass::TestClass(int a,int b)
            {
            __a = a;
            __b = b;
            mSingleton = this;
            }
            TestClass* TestClass::Singleton()
            {
            if(TestClass::mSingleton == NULL)
            {
            return new TestClass(0,0);
            }
            else
            {
            return mSingleton;
            }
            }
            int TestClass::add()
            {
            std::cout << __FUNCTION__ << std::endl;
            return __a+__b;
            }
            int bindClass(lua_State* L)
            {
            open(L);
            module(L)
            [
            class_<TestClass>("TestClass")
            //.def(constructor<int,int>())
            .def("add", &TestClass::add)
            .def("ShowTest", &TestClass::ShowTest),
            def("Singleton", &TestClass::Singleton)
            ];
            return 0;
            }
            int LuaErrorCallBack(lua_State *L)
            {
            std::cout << __FUNCTION__ << std::endl;
            return 0;
            }
            int main(int argc, char* argv[])
            {
            luabind::set_pcall_callback(&LuaErrorCallBack);
            TestClass testClass(10,5);
            lua_State* L = lua_open();  
            luaL_openlibs(L);
            std::cout << "init lua system" << std::endl;
            bindClass(L);
            std::cout << "do lua file" << std::endl;
            try
            {
            std::string strFileName = "add.lua.ini";
            int iRet = luaL_dofile(L, "add.lua.ini");
            if (iRet != 0)
            {
            std::cout<<"loadfile error[file: " << strFileName.c_str() << "]: "<<lua_tostring(L, -1)<<std::endl;
            }
            //if (luaL_loadfile(L, strFileName.c_str()) != 0) {
            // std::cout<<"loadfile error[file: " << strFileName.c_str() << "]"<<lua_tostring(L, -1)<<std::endl;
            //}
            //if (lua_pcall(L, 0, LUA_MULTRET, 0) != 0) {
            // std::cout<<"pcall error[file: " << strFileName.c_str() << "]" <<lua_tostring(L, -1)<<std::endl;
            //}
            std::cout << "end" << std::endl;
            //getchar();
            }
            catch(std::exception& ex)
            {
            std::cout << ex.what() << std::endl;
            }
            catch(luabind::error er)
            {
            std::cout << er.what() << std::endl;
            }
            lua_close(L);
            return 0;
            }


            print("This is valid")
            print(1234)
            bad_function()
            a = "meow"
            b = 7
            c = a + b
            testClass = Singleton()
            a = testClass:add()
            print(a)
            local valMsg = '中文'
            testClass:ShowTest(valMsg)
            print(valMsg)
            posted @ 2014-01-06 16:49 Enic 閱讀(244) | 評論 (0)編輯 收藏

            // boost_test.cpp : Defines the entry point for the console application.
            //
            #include "stdafx.h"
            #include <iostream>
            #include <vector>
            #include <boost/smart_ptr.hpp>
            #include <boost/bind.hpp>
            #include <boost/function.hpp>
            class CTest
            {
            public:
            virtual void TestShow()
            {
            std::cout << __FUNCTION__ << std::endl;
            }
            };
            int _tmain(int argc, _TCHAR* argv[])
            {
            typedef boost::function<void()> TVoidEvent;
            std::vector<TVoidEvent> vVoidEvent;
            for (int i = 0; i < 9; ++i)
            {
            boost::shared_ptr<CTest> spTest = boost::make_shared<CTest>();
            boost::weak_ptr<CTest> wpTest(spTest);
            //TVoidEvent voidEvent = boost::bind(
            // [/*wpTest*/]()
            // {
            // //boost::shared_ptr<CTest> spTestTem = wpTest.lock();
            // //if(spTestTem)
            // //{
            // // spTestTem->TestShow();
            // //}
            // std::cout << __FUNCTION__ << std::endl;
            // }
            // );
            //TVoidEvent voidEvent = [spTest]
            // {
            // if (spTest)
            // {
            // spTest->TestShow();
            // }
            // };
            // bind配合weak_ptr使用
            //TVoidEvent voidEvent = [wpTest]
            //{
            // boost::shared_ptr<CTest> spTem = wpTest.lock();
            // if (spTem)
            // {
            // spTem->TestShow();
            // }
            //};
            // 直接把lambda和bind一起用編譯有問題
            TVoidEvent voidEvent = boost::bind(
            [wpTest]
            {
            boost::shared_ptr<CTest> spTem = wpTest.lock();
            if (spTem)
            {
            spTem->TestShow();
            }
            }
            );
            vVoidEvent.push_back(voidEvent);
            }
            std::for_each(vVoidEvent.begin(), vVoidEvent.end(),
            [](TVoidEvent& voidEvent)
            {
            voidEvent();
            });
            return 0;
            }


            上面能過,下面就過不了,,,模板V5
                           []{std::cout << __FUNCTION__ << std::endl;}();
            boost::bind([]{std::cout << __FUNCTION__ << std::endl;});
            posted @ 2013-12-31 17:02 Enic 閱讀(458) | 評論 (0)編輯 收藏

            記憶中獲取dib位圖是有順序一說的,,,今天被坑了一把確實是有一說,是和圖像的格式相關的,MSDN上這樣描述:

            A pointer to the bitmap buffer. If the bitmap is a bottom-up DIB, the pointer points near the end of the buffer. If the bitmap is a top-down DIB, the pointer points to the first byte of the buffer.

            摘錄網上查到的筆記:

            CImage類提供了GetBits()函數來讀取數據區,GetBits()函數返回的是圖片最后一行第一個像素的地址,網上有人說返回指針的起始位置是不同的,有些圖片返回的是左上角像素的地址,有些是左下角像素的地址,跟圖片內部順序有關。這里我們不必關心起始位置,只要很另外兩個函數GetPitch()和GetHeight()一起使用就可以得到圖片數據取得起始位置,定義數據區指針為BYTE* img_Data

            img_Data=(BYTE *)m_Image.GetBits()+(m_Image.GetPitch()*(m_Image.GetHeight()-1));

            這樣,img_Data就是圖片數據區的起始位置,這個公式是從codeproject里看到的,介紹的很精辟,可以從google里搜索到。其中GetHeight()函數返回圖片的高度(以像素為單位)。GetPitch()返回圖像的斜度,如果圖像的順序是從下到上(也就是GetBits()返回左上角像素的地址),這時GetPitch()返回一個負值,大小為圖像寬所占有的字節數,例如24位800*600的圖片,返回值應該是正或負的800*3。這樣用每一行的字節數乘行數就可以得到起始位置了。

             

            以上是使用CImage獲取的時候遇到的坑爹,相信直接使用位圖相關的api也是一樣,msdn描述:

            Device-Independent Bitmaps

            There are two varieties of DIBs:

            • A bottom-up DIB, in which the origin lies at the lower-left corner.
            • A top-down DIB, in which the origin lies at the upper-left corner.

            使用gdiplus的時候BitmapData也是類似:

            Stride
            INT
            Offset, in bytes, between consecutive scan lines of the bitmap. If the stride is positive, the bitmap is top-down. If the stride is negative, the bitmap is bottom-up.

             

            兩個關鍵屬性:

            GetPitch( )

            Stride

             

            還有泥馬一個被微軟坑了的壞習慣,DWORD用習慣了,調試了一天都沒看出來這兩個值我取到的是負的,,,坑啊,,,

            posted @ 2013-12-30 22:26 Enic 閱讀(1083) | 評論 (0)編輯 收藏

            image

            posted @ 2013-12-28 14:47 Enic 閱讀(201) | 評論 (0)編輯 收藏

            UI線程無故進入死循環:
            父子窗口重回
            子窗口和父窗口重繪的相關關系:
            WS_CLIPCHILDREN


            標題欄閃動提示:
            任務欄提示:
            任務欄閃動
            FlashWindowEx()
            posted @ 2013-12-25 19:02 Enic 閱讀(178) | 評論 (0)編輯 收藏

            首先一個大觀點:這tmd的根本就和IE控件或者網頁控件無關,本身就是網頁渲染器的效果。更直接的說就是網頁本身的問題。

            網絡上一溜的解決方案大部分都是要把IE控件這個接口實現以下那個數據動一下,最終大概有兩種辦法:1.還是間接的修改了html;2.通過修改窗口rgn來達到目的。

             

            其實關鍵的html就在這兩句:

            <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
            <style type="text/css">
            body{
            border:0px;
            overflow:hidden;
            }
            </style>

             

             

            轉載一下靠譜的方法:

            如何去除Webbrowser滾動條、邊框的方法

            2010-05-22 13:34:44|  分類: Delphi、軟件|字號 訂閱

            在使用delphi開發軟件的時候,有時只需要顯示webbrowser的網頁內容,而不希望顯示webbrowser滾動條或邊框,那么我們如何實現這個效果呢?
                其實,這個問題不是webbrowser控件的問題,而是網頁自身的css控制問題。我們通過調整目標網頁的css效果就可以實現了。
            webbrowser去除滾動條的方法
            將 <body> 改成 <body scroll="no"> 即可。
            webbrowser去除3D邊框的方法
                在網頁的head區域的css部分加上如下代碼即可:
            <style type="text/css">
            body{
            border:0px;
            overflow:hidden;
            }
            </style>
                同時,將網頁的頂部聲明DOCTYPE改成 :
            <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
                而不是 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 等其他這樣的形式。

             

            后來看了下優庫的主頁更牛逼:

            <!DOCTYPE html>直接就沒有

            博客園的:

            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

            163的:<!DOCTYPE html>

            qqgame: <!DOCTYPE HTML>

             

             

            好了,網站開發的卻是不夠敬業

            posted @ 2013-12-24 00:11 Enic 閱讀(463) | 評論 (0)編輯 收藏

            QT的Event機制里邊,所有的Event都是派生于QEvent類,然后Event派發的時候都是通過一個函數:event(QEvent*),通過QEvent::Type()獲取到真實的類型,然后使用static_cast轉換到實際的類型再派發到QXXEvent函數去處理。

            這里是利用了CPP的rtii機制,但是為什么沒有用dynamic_cast呢?猜測是為了效率。

            但是這樣有一個缺陷,就是當Type取到的類型和實際類型不一致的時候沒有rtii的檢測,可能導致類型不匹配,然后崩潰掉。。。

            效率是一個原因,但是個人覺得,穩定性有限于效率。

            即使測試了一下,500000次轉換效率也不會太弱,繼承數深度也不是和效率呈線型關系的:

            class CRoot
            {
            public:
                virtual ~CRoot(){}
            };
            
            class CTest : public CRoot
            {
            public:
                virtual void ShowFunctionName()
                {
                    std::cout << __FUNCTION__ << std::endl;
                }
            };
            
            class CTestEx : public CTest
            {
            public:
                virtual void ShowFunctionName()
                {
                    std::cout << __FUNCTION__ << std::endl;
                }
                
                virtual void ShowOnlyForEx()
                {
                    std::cout << __FUNCTION__ << std::endl;
                }
            };
            
            
            void Func(CTestEx *pTestEx)
            {
                pTestEx->ShowOnlyForEx();
            }
            
            void Func(CTest *pTest)
            {
                try
                {
                    CRoot *pRoot = new CTestEx;
            
                    boost::timer timerTest;
            
                    timerTest.restart();
            
                    for (int i = 0; i < 500000; i++)
                    {
                        CTestEx *pTextEx = nullptr;
                        pTextEx = dynamic_cast<CTestEx*>(pRoot);
                    }
            
                    double dTime = timerTest.elapsed();
                    std::cout << dTime << std::endl;
            
                    timerTest.restart();
            
                    for (int i = 0; i < 500000; i++)
                    {
                        CTest *pText = nullptr;
                        pText = dynamic_cast<CTest*>(pRoot);
                    }
            
                    dTime = timerTest.elapsed();
                    std::cout << dTime << std::endl;
                    //Func(dynamic_cast<CTestEx*>(pRoot));
                    //Func((CTestEx*)pRoot);
            
                    timerTest.restart();
            
                    for (int i = 0; i < 500000; i++)
                    {
                        CTestEx *pTextEx = nullptr;
                        pTextEx = static_cast<CTestEx*>(pRoot);
                    }
            
                    dTime = timerTest.elapsed();
                    std::cout << dTime << std::endl;
                }
                catch(std::exception& refException)
                {
                    std::cout << refException.what() << std::endl;
                }
                catch(std::bad_cast)
                {
                    std::cout << __FUNCTION__ << std::endl;
                }
                catch(...)
                {
                    std::cout << __FUNCTION__ << std::endl;
                }
            }
            
            void Test()
            {
                CTest *pTest = new CTest;
                Func(pTest);
            }
            

            0.031

            0.033

            0.001

            debug模式下運行,感覺這個速度應該是能接受的。

            向下類型轉換的時候使用dynamic_cast應該是有必要的,所有咱們就這樣用了吧,,,

            posted @ 2013-12-22 21:11 Enic 閱讀(214) | 評論 (0)編輯 收藏

            1.為什么要自己擼一個UI庫?

            就好比做菜
            從原材料做任何菜本來都很簡單
            非在別人做好的菜上來改
            改來改去達不到效果說太難了

            你丫有種你用紅燒肉改一回鍋肉試試?
            世界上總有這么一批賤B
            就想撿現成
            越撿路越難還不知道反省

            話說有一人拜師學廚
            他想做道回鍋肉給他老娘吃
            徒弟:師傅,我想做道回鍋肉,該怎么辦呢?
            師傅:你準備點五花肉,煮一下切來炒熟就好了
            徒弟:可是那個難度太高了,再說時間太緊了,師傅,這盤
                  紅燒肉也是五花的,我初學,你還是教我怎么從紅燒
                  肉改回鍋肉吧。等以后我水平提高了,有閑功夫了,
                  再系統學習從生肉開始做回鍋肉!
            師傅:..................................

             

            2.咱肯定是站在巨人的肩膀上,自己擼道行不夠還不知道擼個什么出來。所以呢,一開始打算直接擼duilib,結果發現可能這貨不夠巨人雖然看起來所有功能都有了,但是用起來總覺得差了點什么。然后在喵上了chromium,泥馬折騰好久發現提出一個ui庫是不是太麻煩了,,,也投降了,然后瞅上了skia這貨,有硬件加速啊,泥馬結果能力還是欠缺了點,一口不能吃成胖子,,,然后開始擼uileeihcy,這個思想夠豐富的庫。發現也不是不能直接用。

            好吧,我確實欠抽,,,

            然后開始失敗了無數次,放棄了無數次的自己擼一個想法又出現了,這次實事求是的擼吧。

             

            今天主要看了下大概,不管是duilib、chromium、uileeihcy,他們都是把ui抽象出了一個基類:duilib的control chromium的view uileeihcy的object,不同的是有些control不是container,有些具有這些功能。chromium和uileeihcy都具base都具有container的功能,那咱就也要有這功能。chromium和uileeihcy的基類中有具有的功能:

            1.屬性;2.container;3.eventtarget;4.layout management;5.個控件的私有消息是自己檢查產生派發的。

             

            初步看起來都有一個共性,就是控件的消息自己處理,不過uileeihcy里邊有的設計比較有特點,需要進一步分析以便理解他的設計思想:

            image

            posted @ 2013-12-02 00:15 Enic 閱讀(766) | 評論 (2)編輯 收藏

            僅列出標題
            共22頁: First 10 11 12 13 14 15 16 17 18 Last 
            国内精品人妻无码久久久影院导航 | 国内精品欧美久久精品| 狠狠色综合网站久久久久久久高清 | 国产亚洲欧美成人久久片| 久久无码中文字幕东京热| 午夜精品久久久久久99热| 国产婷婷成人久久Av免费高清 | 国产三级精品久久| 久久久久av无码免费网| 国产∨亚洲V天堂无码久久久| 久久精品国产99久久香蕉| 无码超乳爆乳中文字幕久久| 99久久亚洲综合精品网站| 久久久国产99久久国产一| 久久免费高清视频| 精品综合久久久久久98| 精品久久国产一区二区三区香蕉| 亚洲乱码中文字幕久久孕妇黑人 | 久久久亚洲AV波多野结衣| 四虎国产精品免费久久久| 久久久无码一区二区三区| 亚洲国产成人久久综合区| 丁香久久婷婷国产午夜视频| 久久夜色精品国产噜噜麻豆 | 久久久无码人妻精品无码| 日本精品久久久久久久久免费| 久久精品国产亚洲一区二区| 伊人久久大香线蕉AV色婷婷色| 香蕉aa三级久久毛片| 精品无码久久久久久久久久| 93精91精品国产综合久久香蕉 | 理论片午午伦夜理片久久| 99热成人精品免费久久| 久久精品视频免费| 精品人妻久久久久久888| 77777亚洲午夜久久多人| 久久久亚洲裙底偷窥综合| 免费精品久久天干天干| 国产色综合久久无码有码| 久久久久亚洲av成人网人人软件 | 精品综合久久久久久97|