知新軒
          溫故而知新,可以為師矣.
          posts - 7,  comments - 2,  trackbacks - 0
          解決方案:
          下載并安裝Microsoft Visual C++ 2005 SP1 Redistributable Package (x86)
          http://www.microsoft.com/downloads/thankyou.aspx?familyId=200b2fd9-ae1a-4a14-984d-389c36f85647&displayLang=zh-cn

          PS:
          一定得是SP1版本才行,裝過Microsoft Visual C++ 2005 Redistributable Package (x86),但是問題依舊。
          微軟的補丁做的很細很強大啊。
          posted @ 2008-05-26 13:48 ___ 閱讀(1314) | 評論 (0)編輯 收藏
               摘要: 在struts2中,japserreport通過編寫插件擴展"result-types"的形式實現了跟struts2的集成,本文將采用相同的集成方式,將Crystal Report與struts2集成.  閱讀全文
          posted @ 2008-02-23 22:21 ___ 閱讀(893) | 評論 (0)編輯 收藏
          框架為骨,應用為肉,架構為魂.
          posted @ 2007-08-01 16:16 ___ 閱讀(216) | 評論 (0)編輯 收藏
          編碼若禹王制水,宜疏不宜堵.
          posted @ 2007-07-05 11:56 ___ 閱讀(186) | 評論 (0)編輯 收藏

          使用gcc(win32)根據java導出的jini頭文件,編譯出的動態(tài)庫,無法被java正常的調用.而相同的頭文件,使用vc6編譯出的dll則可以.函數聲明如下:
          JNIEXPORT jint JNICALL Java_DataModule_VersionCtrl_CPP_1SrvVsn_1Depend
            (JNIEnv *, jobject, jstring, jint, jstring, jint, jint, jstring);
          其中:
          JNIEXPORT  在gcc和vc6的中都是定義為 __declspec(dllexport)
          JNICALL  在兩種編譯環(huán)境下也都是定義為 __stdcall
          觀察兩種環(huán)境下生成的dll,發(fā)現這兩個dll導出的函數名稱有所區(qū)別.
          一個是 (gcc)
          Java_DataModule_VersionCtrl_CPP_1SrvVsn_1Depend@32
          另一個是(vc6)
           _Java_DataModule_VersionCtrl_CPP_1SrvVsn_1Depend@32
          相差了一個下劃線!!
          難道是因為gcc編譯出的函數名稱與java預期的不一致,導致其在java中不能被正常的調用?于是,手動修改用于gcc編譯的jini頭文件中的函數聲明,在其原有名稱前加一個下劃線,使其與vc6的輸出的名稱一致,并相應修改函數定義中的函數名稱.重現編譯之,并再次于java中調用,竟然通過了.

          google搜索 __stdcall

          發(fā)現不同編譯器對__stdcall的實現是不同的,所以導致相同的聲明下,輸出函數名不一致.而java在win32平臺下默認是以微軟的vc6的編譯輸出格式為標準進行調用的.所以相同的頭文件vc6可以,而gcc不行,(bcb也不行)
          或許java有選項可以輸出兼容于其他編譯器的JNI頭文件吧.^_^.

          posted @ 2005-12-23 10:47 ___ 閱讀(3175) | 評論 (2)編輯 收藏

          1,編碼時需要包括頭文件:#include <libxml/globals.h>,編譯時需要鏈接 -lxml2 -lwsock32 的庫文件.
          2,xmlexports.h需要修改部分代碼才可以被正常連接,否則使用xmlfree函數時會報"_imp__xmlFree"的鏈接錯誤.
             修改代碼如下:
             將 #if defined(_WIN32) && defined(__MINGW32__) 代碼段,包括:
             #if defined(_WIN32) && defined(__MINGW32__)
            #undef XMLPUBFUN
            #undef XMLPUBVAR
            #undef XMLCALL
            #if defined(IN_LIBXML) && !defined(LIBXML_STATIC)
              #define XMLPUBFUN __declspec(dllexport)
              #define XMLPUBVAR __declspec(dllexport)
            #else
              #define XMLPUBFUN
              #if !defined(LIBXML_STATIC)
                #define XMLPUBVAR __declspec(dllimport) extern
              #else
                #define XMLPUBVAR extern
              #endif
            #endif
            #define XMLCALL __cdecl
            #if !defined _REENTRANT
              #define _REENTRANT
            #endif
          #endif
          注釋掉,然后在原有位置添上:
          #if defined(_WIN32) && defined(__MINGW32__)
             #define XMLPUBFUN
             #ifdef __cplusplus
               #define XMLPUBVAR extern
             #else
               #define XMLPUBVAR
             #endif
             #if !defined _REENTRANT
               #define _REENTRANT
             #endif
          #endif
             具體原因及詳細信信息    <?xml version="1.0" encoding="UTF-8"?>
             <NodeRoot ver = "000">
                <Node1 ver = "111">
                      <Node2 ver = "222"/>
                 </Node1>
                 <Node3 ver = "333">
                       v3
                 <Node3/>
             </NodeRoot>
             "
             首先,打開xml文件,使用:
             XMLPUBFUN xmlDocPtr XMLCALL   xmlParseFile  (const char *filename); (libxml/parser.h)
             獲得xml的根節(jié)點,使用:
             XMLPUBFUN xmlNodePtr XMLCALL xmlDocGetRootElement (xmlDocPtr doc);(libxml/tree.h)
             
             例:
            int ParseXMLFile(char *pXMLFileName)
             // retval:
             // 0 : Success
             // -1: Error ,for xml file open
             // -2: Error ,for xml file parse
             {
                 int retval = 0;
                 xmlDocPtr doc = NULL;
                 xmlNodePtr cur = NULL;

                 doc = xmlParseFile(pXMLFileName);
                 if (doc == NULL ) 
                 {
                       fprintf(stderr,"XMLParser:Document not parsed successfully. \n");
                       retval = -1;
                       goto ERROR_RET;
                 }
                 cur = xmlDocGetRootElement(doc);         // 會得到NodeRoot 節(jié)點.
                 if (cur == NULL) 
                 {
                       fprintf(stderr,"XMLParser:Empty document.\n");
                       retval = -2;
                       goto ERROR_RET;
                 }


                 //     ...  do something
                 parsexml(doc,cur);         // 定義見下面.


              ERROR_RET:
                 if(doc != NULL)
                     xmlFreeDoc(doc);
                 return retval;
              }
             其中,:
             結構xmlNodePtr 定義如下(libxml/tree.h):
              typedef struct _xmlNode xmlNode;
              typedef xmlNode *xmlNodePtr;
              struct _xmlNode {
              void           *_private; /* application data */
              xmlElementType   type; /* type number, must be second ! */
              const xmlChar   *name;      /* the name of the node, or the entity */ 
              struct _xmlNode *children; /* parent->childs link */
              struct _xmlNode *last; /* last child link */
              struct _xmlNode *parent; /* child->parent link */
              struct _xmlNode *next; /* next sibling link  */
              struct _xmlNode *prev; /* previous sibling link  */
              struct _xmlDoc  *doc; /* the containing document */

              /* End of common part */
              xmlNs           *ns;        /* pointer to the associated namespace */
              xmlChar         *content;   /* the content */
              struct _xmlAttr *properties;/* properties list */
              xmlNs           *nsDef;     /* namespace definitions on this node */
              void            *psvi; /* for type/PSVI informations */
              unsigned short   line; /* line number */
              unsigned short   extra; /* extra data for XPath/XSLT */
              };
              我們可以使用節(jié)點結構中的指針成員來遍歷xml樹中的各個節(jié)點.
              我一般使用遞歸的方式遍歷xml樹:
             int parsexml(xmlDocPtr doc, xmlNodePtr cur)
             {
                 while (cur != NULL)
                 {
                    // do something about every node
                     printf("name: %s\n",cur->name);
                    {
                          //  for example,we get the "ver" attribute of every node
                          xmlChar *uri = NULL; 
                          uri = xmlGetProp(cur,(const xmlChar *) "ver"); 
                          if(uri != NULL)
                          {
                            printf("ver: %s\n", uri);
                             xmlFree(uri);
                          }
                          ;   // ... others

                       }
              
                       parsexml(doc,cur->xmlChildrenNode);
                       cur = cur->next;
                    }
                    return 0;
                }
               對于我們已經獲取的結點,我們可以使用以下函數獲取其各項屬性各項屬性:
                XMLPUBFUN xmlChar * XMLCALL xmlGetProp  (xmlNodePtr node,const xmlChar *name); (libxml/tree.h)
                獲得該節(jié)點的某項屬性,其中,屬性名稱使用 第二個參數name指定,第一個參數需要傳入結點指針.
                屬性的值通過函數返回傳出,返回類型是 xmlChar,這里注意,返回的地址是指向堆的,這意味著你需要
                在使用完畢后,手動釋放這塊內存.這里使用xmlfree函數,并將指針傳入即可.
                
                
                更多函數參見 libxml/tree.h

                最后,你需要調用xmlFreeDoc函數進行必要的釋放工作.
                
                完整代碼:
                
          http://www.aygfsteel.com/Files/lixf/testlibxml.rar
                
            
             

          posted @ 2005-12-07 11:40 ___ 閱讀(1465) | 評論 (0)編輯 收藏

          <2005年12月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(1)

          隨筆檔案(6)

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 沈丘县| 德钦县| 修水县| 闽清县| 德保县| 安国市| 丰城市| 五指山市| 荥经县| 从江县| 湘乡市| 饶河县| 乐安县| 和顺县| 徐水县| 潮州市| 顺平县| 什邡市| 长宁区| 邢台县| 巩留县| 宁津县| 苗栗县| 福建省| 乌什县| 怀远县| 锦屏县| 搜索| 多伦县| 凉城县| 龙口市| 诸城市| 丹寨县| 志丹县| 麦盖提县| 榕江县| 石阡县| 新宁县| 潍坊市| 房产| 马公市|