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

            woaidongmao

            文章均收錄自他人博客,但不喜標題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
            數(shù)據(jù)加載中……

            C++ API訪問Berkeley DB XML數(shù)據(jù)庫問題

            Berkeley DB XML是一個開源的嵌入式的原生XMLnative-XML)數(shù)據(jù)庫。它對外提供多種訪問接口,如C++、Java、PerlPython、PHP、Tcl、Ruby等。在使用C++接口的過程中并非一帆風順,如有一處設置不當就可能導致失敗。這里筆者將整個過程中遇到的問題寫了出來,希望對后面的使用者有所幫助。

            在自己建立工程操作Berkeley DB XML數(shù)據(jù)庫時需要引用到該數(shù)據(jù)庫的很多DLL,這個跟訪問SQL Server等數(shù)據(jù)庫是不一樣的,因為 Berkeley DB XML是嵌入式數(shù)據(jù)庫,它跟應用程序運行在相同的地址空間,處于同一個進程。

            這里以Visual Studio.net 2003C++環(huán)境為例。

            1.創(chuàng)建工程。先新建一個空白的解決方案Solution1,然后在該解決方案中新建一個Win32控制臺項目Test,工程會自動生成很多文件。保留Test.cpp,其他文件全部刪除。

            2.添加Berkeley DB XML頭文件。頭文件的位于C:\Program Files\Oracle\Berkeley DB XML 2.3.10\include(默認安裝路徑),將下面的所有文件拷貝至Test目錄下。

            3.添加libDLL文件。lib位于C:\Program Files\Oracle\Berkeley DB XML 2.3.10\lib目錄下,共四個libdbxml23.liblibdb45.libxerces-c_2.libxqilla10.lib。DLL位于C:\Program Files\Oracle\Berkeley DB XML 2.3.10\bin目錄下,共有四個分別為libdbxml23.dll、libdb45.dll、xerces-c_2_7.dllxqilla10.dll。注意,將lib拷貝到Test目錄下,DLL拷貝到Test/Debug(要先生成一下項目才會產(chǎn)生這樣一個目錄)目錄下。

            4.編寫測試代碼

            /* file Test.cpp */

            #include <dbxml/DbXml.hpp>

             

               using namespace DbXml;

             

               int main(int argc, char **argv)

               {

                // An empty string means an in-memory container, which

                // will not be persisted

                std::string containerName = "";

                std::string content = "<hello>Hello World</hello>";

                std::string docName = "doc";

              

                try {

                 // All BDB XML programs require an XmlManager instance

                 XmlManager mgr;

                 XmlContainer cont = mgr.createContainer(containerName);

               

                 // All Container modification operations need XmlUpdateContext

                 XmlUpdateContext uc = mgr.createUpdateContext();

                 cont.putDocument(docName, content, uc);

               

                 // Now, get the document

                 XmlDocument doc = cont.getDocument(docName);

                 std::string docContent;

                 std::string name = doc.getName();

                 docContent = doc.getContent(docContent);

               

                 // print it

                 std::cout << "Document name: " << name << "\nContent: " <<

                  docContent << std::endl;

               

                 // In C++, resources are released as objects go out

                 // of scope.

                 } catch (XmlException &xe) {

                 std::cout << "XmlException: " << xe.what() << std::endl;

                }

                   return 0;

               }

            5.設置工程屬性。

            打開工程屬性頁,

            1)將預編譯頭設置為”不使用預編譯頭”;

            2)添加附加包含目錄,例如D:\sourcecode\Solution1\TestTest工程所在目錄)

            3)添加附加依賴項。包括libdbxml23.lib libdb45.lib xerces-c_2.lib xqilla10.lib。

            6.運行。這時你會發(fā)現(xiàn)程序崩潰,根本無法運行。

               這時默認是在Debug模式,你將它改為Release模式,嘿,成功了。事實上遠沒有這么簡單,如果到此為止的話,這邊文章也就沒有寫的必要了。

            我們編寫程序不可能在Release下整吧,程序是調(diào)出來的啊。因此必須搞定Debug模式下的運行問題。可能你剛才在拷貝lib文件時已經(jīng)發(fā)現(xiàn)C:\Program Files\Oracle\Berkeley DB XML 2.3.10\lib下還有另外四個lib文件。與前面提到的四個文件的區(qū)別是文件名后面多了一個d,很明顯這是用于調(diào)試的。

            那么是不是把上面的lib文件替換為這四個文件(libdbxml23d.lib、libdb45d.lib、xerces-c_2D.libxqilla10d.lib)就可以了呢?沒那么簡單!你還需要打開Berkeley DB XML的源代碼工程,然后在Debug模式下生成一邊(編譯Berkeley DB XML源代碼很簡單,這里不多述),這時你就能在C:\Program Files\Oracle\Berkeley DB XML 2.3.10\dbxml\build_windows\Debug下找到這四個調(diào)試版的文件(libdbxml23d.dll、libdb45d.dll、xerces-c_2_7D.dllxqilla10d.dll)。

            如果說把上面DLL文件替換為這四個DLL就可以了,我也沒有寫這篇文章的必要了。好,不管怎么說先把上面提到的八個文件替換了再說。這時當然要將工程屬性中的附加依賴項改為” libdbxml23d.lib libdb45d.lib xerces-c_2D.lib xqilla10d.lib”。然后開始生成解決方案比運行,你會發(fā)現(xiàn)問題依然沒有解決,在Debug模式還是存在程序崩潰的問題。

            我一一查看項目配置屬性以及是否有什么DLL沒有加載全還是什么其他之類的原因,最后終于解決。原來代碼生成中有個選項”運行時庫”,系統(tǒng)默認是” 單線程調(diào)試(/MLd)”,這里一定要選擇” 多線程調(diào)試 DLL (/MDd)”這一項。

             

            posted on 2009-08-18 21:37 肥仔 閱讀(915) 評論(0)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)庫

            国产精品久久一区二区三区| 久久国产精品偷99| 久久久一本精品99久久精品66 | 久久精品国产精品国产精品污| 99久久国产综合精品网成人影院| 国产精品美女久久久久av爽| 青青草原综合久久大伊人| 99久久国产热无码精品免费| 久久综合九色综合欧美就去吻| 久久精品午夜一区二区福利| 色综合久久天天综线观看| 国产精品久久永久免费| 大香伊人久久精品一区二区| 18岁日韩内射颜射午夜久久成人| 国内精品综合久久久40p| 99久久夜色精品国产网站| 无码AV波多野结衣久久| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 97精品依人久久久大香线蕉97| 91精品久久久久久无码| WWW婷婷AV久久久影片| 少妇内射兰兰久久| 久久www免费人成看片| 久久无码高潮喷水| 久久精品免费一区二区| 青青草原综合久久大伊人导航| 精品久久久久久无码人妻热| 久久精品国产亚洲麻豆| 91精品国产91久久久久福利 | a级毛片无码兔费真人久久| 精品久久香蕉国产线看观看亚洲 | 亚洲精品成人久久久| 久久久无码精品午夜| 久久精品无码一区二区三区日韩 | 亚洲va中文字幕无码久久| 亚洲AV无码久久| 久久久久久久亚洲Av无码| 久久久国产精品亚洲一区 | 人妻无码久久精品| 久久久噜噜噜久久中文字幕色伊伊| 久久婷婷人人澡人人爽人人爱|