青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

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 閱讀(520) | 評論 (0)編輯 收藏

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

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

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

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




posted @ 2014-01-08 11:36 Enic 閱讀(192) | 評論 (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 閱讀(251) | 評論 (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 閱讀(473) | 評論 (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 閱讀(1096) | 評論 (0)編輯 收藏

image

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

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


標題欄閃動提示:
任務欄提示:
任務欄閃動
FlashWindowEx()
posted @ 2013-12-25 19:02 Enic 閱讀(188) | 評論 (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 閱讀(472) | 評論 (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 閱讀(226) | 評論 (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 閱讀(771) | 評論 (2)編輯 收藏

僅列出標題
共22頁: First 10 11 12 13 14 15 16 17 18 Last 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            猫咪成人在线观看| 久久在线播放| 国产精品毛片一区二区三区| 亚洲欧美国产视频| 亚洲一区二区成人| 国产综合久久| 欧美不卡一卡二卡免费版| 你懂的国产精品| 亚洲精品自在在线观看| 日韩午夜激情| 国产欧美精品xxxx另类| 久久人人97超碰精品888| 久久婷婷av| 中文精品在线| 香蕉乱码成人久久天堂爱免费| 国产一区高清视频| 欧美电影免费观看大全| 欧美色网在线| 久久久免费精品| 欧美国产一区二区在线观看 | 欧美日韩一区二区国产| 亚洲性线免费观看视频成熟| 亚洲欧美日韩在线播放| 在线日韩av| 亚洲一二三区视频在线观看| 亚洲第一精品夜夜躁人人躁| 一区二区91| 亚洲福利在线看| 在线综合亚洲| 亚洲精品乱码久久久久久久久| 亚洲一本大道在线| 91久久国产综合久久| 亚洲免费中文| 日韩特黄影片| 久久久久久自在自线| 亚洲一区二区三区在线视频| 久久久久久一区| 亚洲欧美日韩一区二区在线| 免费中文日韩| 美女图片一区二区| 国产欧美日韩精品专区| 亚洲免费观看在线视频| 亚洲国产精品t66y| 欧美在线视频免费播放| 亚洲欧美久久久| 欧美另类在线播放| 欧美国产日韩亚洲一区| 国产亚洲欧洲| 亚洲一区一卡| 亚洲在线成人| 欧美日韩亚洲一区二区三区| 亚洲国产精品专区久久 | 久久综合给合| 久久九九99| 国产欧美一区二区精品性色| 99re热这里只有精品视频| 亚洲日本欧美| 欧美成人日本| 亚洲福利视频网站| 韩国av一区二区三区四区| 午夜精品久久久久久| 性做久久久久久免费观看欧美| 欧美日本韩国一区二区三区| 亚洲韩国青草视频| 亚洲精品午夜精品| 欧美成人福利视频| 亚洲高清一区二| 最新亚洲电影| 蘑菇福利视频一区播放| 亚洲激情小视频| 日韩视频精品在线观看| 欧美国产日本高清在线| 亚洲久久一区| 亚洲尤物在线视频观看| 国产欧美日韩精品一区| 欧美综合77777色婷婷| 久久久久国产精品一区三寸| 一区二区亚洲精品国产| 久久蜜桃资源一区二区老牛| 欧美韩国在线| 亚洲一区免费网站| 国产日韩欧美在线播放不卡| 久久国产婷婷国产香蕉| 欧美高清自拍一区| 亚洲视频中文| 国产日韩欧美一区二区三区四区| 欧美在线观看网址综合| 欧美成在线观看| 中文在线资源观看视频网站免费不卡| 欧美日韩一区二区在线观看视频| 一区二区三区视频在线播放| 久久精品九九| 亚洲精品乱码久久久久久蜜桃麻豆 | 女人天堂亚洲aⅴ在线观看| 亚洲精品乱码久久久久久日本蜜臀| 一本综合久久| 国产午夜精品在线观看| 久久综合九色综合欧美狠狠| 亚洲人成网站999久久久综合| 亚洲天堂男人| 激情文学综合丁香| 欧美日韩国产一区二区三区| 欧美一级电影久久| 亚洲国产婷婷香蕉久久久久久99 | 欧美影院精品一区| 亚洲国产精彩中文乱码av在线播放 | 嫩草成人www欧美| 亚洲一区二区三区中文字幕在线 | 国产精品av久久久久久麻豆网| 亚欧成人精品| 亚洲欧洲日韩在线| 久久成人免费网| 日韩视频永久免费| 国产综合网站| 国产精品电影在线观看| 毛片精品免费在线观看| 亚洲一区二三| 亚洲精品欧美精品| 免费亚洲视频| 久久精品国产一区二区三区| 一区二区三区欧美亚洲| 尤物99国产成人精品视频| 国产精品久久久久aaaa| 欧美精品激情在线观看| 久久久久久久综合色一本| 亚洲一区美女视频在线观看免费| 亚洲国产精品尤物yw在线观看| 久久久久五月天| 午夜欧美大片免费观看| 在线中文字幕一区| 亚洲乱码精品一二三四区日韩在线| 国产真实乱子伦精品视频| 国产欧美日韩视频| 国产精品欧美在线| 国产精品久久看| 欧美性大战久久久久久久| 欧美美女喷水视频| 欧美顶级少妇做爰| 欧美成人免费播放| 欧美成人第一页| 欧美电影在线观看完整版| 久久综合伊人77777蜜臀| 欧美中文字幕视频在线观看| 亚洲女同同性videoxma| 亚洲一区二区在线播放| 亚洲视频在线观看三级| 亚洲精品影视| 夜夜嗨av一区二区三区网站四季av | 91久久嫩草影院一区二区| 一区二区三区在线免费观看| 一区二区在线视频观看| 一区二区三区在线不卡| 亚洲国产va精品久久久不卡综合| 亚洲高清中文字幕| 亚洲精品女人| 亚洲午夜日本在线观看| 亚洲一级片在线看| 欧美一区二区三区日韩视频| 久久精品国产999大香线蕉| 久久久美女艺术照精彩视频福利播放| 久久裸体艺术| 亚洲福利视频一区二区| 99视频一区二区三区| 亚洲午夜视频| 久久久久.com| 欧美国产在线电影| 欧美三级精品| 国产一区二区三区四区三区四| 国内一区二区三区| 日韩视频不卡| 欧美在线亚洲综合一区| 欧美aa在线视频| 99人久久精品视频最新地址| 午夜精品久久久久久久男人的天堂 | 国产精品xvideos88| 国产亚洲精品成人av久久ww| 亚洲国产精品成人综合| 亚洲视频一二三| 巨乳诱惑日韩免费av| 亚洲精选视频在线| 欧美在线播放一区二区| 欧美黑人国产人伦爽爽爽| 国产精品一区二区久激情瑜伽| 在线观看一区视频| 亚洲欧美另类综合偷拍| 欧美a级片网| 亚洲女ⅴideoshd黑人| 欧美va亚洲va国产综合| 国产视频一区三区| 一区二区不卡在线视频 午夜欧美不卡在| 午夜一区在线| 亚洲电影网站| 久久aⅴ国产紧身牛仔裤| 欧美三级第一页| 亚洲国产成人91精品| 久久电影一区| 999亚洲国产精| 欧美大片免费| 亚洲国产1区| 久久久久久自在自线|