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

Prayer

在一般中尋求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

BCB 客戶端 tuxedo 開發實例

Posted on 2008-12-11 15:07 Prayer 閱讀(1329) 評論(0)  編輯 收藏 引用 所屬分類: TUXEDO
 

BCB 客戶端 tuxedo 開發實例
-supermgr

在BCB中怎樣使用tuxedo呢?

本文給出了一個例子。

然而,這個例子在后來被證明還是有點問題的,

就是在tpcall調用后,無法釋放dll,而且會出錯。

這一問題咨詢過tuxedo,多少年過去了,我還沒有

得到問題的解。

 

tuxedo 的函數很多,所有應用都使用其中子集。這些函數子集包含在開發

包中一定的動態庫中。下面以

tpinit,tpcall,tpterm,tpfree,tpalloc,Fget32,Fchg32,FLDOCC32 幾個函數為

例介紹一下在該子集下的編程方式。(不是很準喲)

1、首先 找到這些函數所在的動態庫。經過解析發現以上函數包含        

    在wtuxws32.dll,libfml32.dll 兩個動態庫中。多好,有了這兩個動

   態庫,應用程序發行時,帶上他們就可以了。再也不會出現 操作系統彈出

   的動態庫定位錯誤了。 且慢,后經研究發現,光有這兩個dll不行,他們

   的運行還需如下6個dll:libbuft.dll,libengine.dll,libfml.dll,
 
   libgpnet.dll,libtux.dll,libwsc.dll。 哈哈。總算解析完了。

   好,把這些文件copy出來到自己的工程目錄下。多棒。趕緊進入下一步。

2、配置編譯環境。這很重要。為使大家編程方便,我們做些小動作。在

   BCB 的安裝目錄下(即$(BCB)標識的目錄)建立tuxedo\目錄,將

   tuxedo開發包中的 \bin\,\include\,\lib\幾個目錄拷貝到該目錄下。
  
   然后,在Option|Directories/Conditionals中設置
  
    Include Path :   $(BCB)\Tuxedo\include
    Library Path :   $(BCB)\Tuxedo\lib
   
    好了,環境設置好了。在你的工程中include :
    #include <atmi.h>
    #include <fml32.h>
    #include <tmenv.h>
   
    哦,他們三個文件實在太重要了,不包含進來你會后悔的:)
   
3、建立一個tuxedo子集函數結構。為什么這樣做呢,直接使用tuxedo函數

   不好嗎? 這沒什么的,依個人編程環境而定。我習慣于在結構名下
  
   使用這些 外來開發包中的函數,因為你對他們不是很熟,有時會遺忘
  
   其名稱,將其放在結構中,利用BCB自動提示功能,你就可以很容易
  
   找到(想起)需要的函數了。我定義的結構如下:
  
 typedef
 struct _FunTuxedo
 {
 
  int
  (_TMDLLENTRY *
  tpcall)(char _TM_FAR *,
   char _TM_FAR *,
   long ,
   char _TM_FAR * _TM_FAR *,
   long _TM_FAR *,
   long );
   
  int
  (_TMDLLENTRY *
  tpinit)(TPINIT _TM_FAR *);
  
  int
  (_TMDLLENTRY *
  tpterm)(void);
  void
  (_TMDLLENTRY *
  tpfree)(char _TM_FAR *);
  
  char *
  (_TMDLLENTRY *
  tpalloc)(char _TM_FAR *,
      char _TM_FAR *,
      long);
  
  int
  (_TMDLLENTRY *
  Fget32)(FBFR32 _TM_FAR *,
     FLDID32,
     FLDOCC32,
     char _TM_FAR *,
     FLDLEN32 _TM_FAR *);
  
  
  int
  (_TMDLLENTRY *
  Fchg32)(FBFR32 _TM_FAR *,
     FLDID32,
     FLDOCC32,
     char _TM_FAR *,
     FLDLEN32);
  FLDOCC32
  (_TMDLLENTRY *
  Foccur32)( FBFR32 _TM_FAR *,
    FLDID32);
  
  HMODULE hLibfml32; // libfml32.dll 動態庫句柄
  HMODULE hWtuxws32; // wtuxws32.dll 動態庫句柄
 
 }FUNTUXEDO,*PFUNTUXEDO;
 
    這里,我將兩個動態庫句柄加入到了結構中,是因為我打算動態使用
   
   tuxedo中間件。方便我釋放他們。,下一節介紹裝載/釋放他們
  
4 裝載、釋放中間件(基于FUNTUXEDO結構)

   哈,這很容易,主要用到LoadLibrary,FreeLibrary,GetProcAddress
  
   三個函數。裝載代碼如下:
  
    PFUNTUXEDO pFun;      
 
    //Loading Fchg32, Fget32 by LIBFML32.DLL
    pFun->hLibfml32 = LoadLibrary(libfml32.dll);
    if (pFun->hLibfml32 == NULL)
    {
     return -1;
    }
   
    (FARPROC &)pFun->Fchg32
     =(FARPROC)GetProcAddress(pFun->hLibfml32,Fchg32);
    (FARPROC &)pFun->Fget32
     =(FARPROC)GetProcAddress(pFun->hLibfml32,Fget32);
 (FARPROC &)pFun->Foccur32
     =(FARPROC)GetProcAddress(pFun->hLibfml32,Foccur32);       
           
    if (pFun->Fchg32 == NULL || pFun->Fget32 == NULL || pFun->Foccur32 == NULL)
    {
     FreeLibrary(pFun->hLibfml32);
        pFun->hLibfml32 = NULL;
     return -2;
    }
 //Loading tpacall, tpalloc, tpfree, tpinit, tpterm by WTUXWS32.DLL
 pFun->hWtuxws32 = LoadLibrary(wtuxws32.dll);
    if (pFun->hWtuxws32 == NULL)
    {
     FreeLibrary(pFun->hLibfml32);
        pFun->hLibfml32 = NULL;       
     return -3;
    }   
       
    (FARPROC &)pFun->tpcall
     =(FARPROC)GetProcAddress(pFun->hWtuxws32,tpacall);                                 
    (FARPROC &)pFun->tpalloc
     =(FARPROC)GetProcAddress(pFun->hWtuxws32,tpalloc);
    (FARPROC &)pFun->tpfree
     =(FARPROC)GetProcAddress(pFun->hWtuxws32,tpfree);
    (FARPROC &)pFun->tpinit
     =(FARPROC)GetProcAddress(pFun->hWtuxws32,tpinit);
    (FARPROC &)pFun->tpterm
     =(FARPROC)GetProcAddress(pFun->hWtuxws32,tpterm);        
                       
    if (pFun->tpcall == NULL || pFun->tpalloc == NULL ||
     pFun->tpfree == NULL || pFun->tpinit  == NULL ||
        pFun->tpterm == NULL)
    {
     FreeLibrary(pFun->hLibfml32);
        pFun->hLibfml32 = NULL;       
        FreeLibrary(pFun->hWtuxws32);
 pFun->hWtuxws32 = NULL;
        return -4;
    }    
  
   釋放時很簡單,只需
        FreeLibrary(pFun->hLibfml32);         
        FreeLibrary(pFun->hWtuxws32);
   即可。

(注:傳統情況下,FreeLibrary(DllHandle) 是不會出問題的。但在

BEA 公司 的 這些dll面前,ms 的 FreeLibrary 就不行了,當應用程序

退出時,會有非法地址訪問的問題。我檢查過數次,只要一經調用tpcall

,退出時就會有問題。)

  折衷的辦法是 使用 try-catch,釋放時不使用FreeLibrary,

而在應用程序退出時,最后使用 FreeLibraryAndExitThread,否則即使

你使用FreeLibrary 也沒法通過 catch 捕捉到異常。呵呵。


   
 5、使用。例:...的內容查幫助吧。
 
    PFUNTUXEDO pFun;   
    char *pSendBuff;
    char *pRecvBuff;
    long lRet;
    short sRet;
    int iRet;    
   
   
    //中間件服務
   
    pSendBuff = pFun->tpalloc(...);
    if (pSendBuff == NULL)
    {
     return ERR_TUXEDO;
    }
   
    pRecvBuff = pFun->tpalloc(...);
    if (pRecvBuff == NULL)
    {
     pFun->tpfree(pSendBuff);
        return ERR_TUXEDO;
    }
   
    try
    {   
    iRet = pFun->Fchg32(...);
    if (iRet == -1)
    {
     throw(1);
    }                   
   
    //建立連接
    iRet = pFun->tpinit(NULL);
    if (iRet == -1)
    {
     throw(2);
    }                       
     
    iRet = pFun->tpcall(...);
    if (iRet == -1)
    {
     throw(3);
    }     
   
    iRet = pFun->tpterm();
    if (iRet == -1)
    {
     throw(4);       
    }
    iRet =pFun->Fget32(...);
    if (iRet == -1)
    {
     throw(4);       
    }                         
   
    pFun->tpfree(pSendBuff);
    pFun->tpfree(pRecvBuff);
   
    }
    catch(int Err)
    {                   
     pFun->tpfree(pSendBuff);
  pFun->tpfree(pRecvBuff);
        return Err;
    }
    catch(...)
    {
     return ERR_UNKNOWN;
    }   

    //這里可以處理接收到的數據結果
    //...  
     
6、編譯。

 

注意,這里有一個問題。當tpcall后,釋放dll時,有一點麻煩。

后來發現的。

2003-7

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美日本免费| 99精品欧美一区| 激情久久一区| 国产精品亚洲综合| 国产精品久久久免费| 欧美三级电影大全| 国产精品欧美日韩一区| 国产精品嫩草99av在线| 国产精品自拍网站| 国产午夜精品一区二区三区欧美| 国产亚洲一区二区三区| 在线观看亚洲精品视频| 亚洲激情成人在线| 在线视频欧美一区| 欧美国产日韩一区二区| 欧美日韩1区2区| 国产欧美日韩| 亚洲精品护士| 欧美一区二区三区免费视| 久久免费一区| 日韩视频三区| 久久久99国产精品免费| 欧美精品一区二区三区在线播放| 国产欧美日韩综合一区在线播放| 亚洲经典视频在线观看| 亚洲视频一区| 免费亚洲一区| 亚洲天堂免费观看| 久久免费国产| 国产精品激情偷乱一区二区∴| 国产一区自拍视频| 亚洲视频免费看| 蜜臀99久久精品久久久久久软件| 亚洲精选久久| 快播亚洲色图| 国产丝袜一区二区三区| 一本色道久久综合亚洲精品不卡| 久久九九精品| 亚洲自拍电影| 欧美日韩国产页| 91久久夜色精品国产九色| 久久久国产一区二区| 亚洲先锋成人| 欧美国产日韩亚洲一区| 在线观看福利一区| 久久国产日韩欧美| 99热这里只有精品8| 久久精品视频在线免费观看| 国产精品欧美日韩久久| 亚洲伦理自拍| 欧美高清不卡在线| 欧美在线免费观看亚洲| 国产精品久久久一区二区三区| 亚洲人体偷拍| 牛人盗摄一区二区三区视频| 欧美一区二区精品久久911| 国产精品国产自产拍高清av王其| 日韩亚洲一区在线播放| 欧美高清一区二区| 猫咪成人在线观看| 亚洲国产精品va在线看黑人| 免费在线看一区| 久久久亚洲国产美女国产盗摄| 国产亚洲毛片在线| 久久乐国产精品| 免费在线欧美黄色| 亚洲三级观看| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 亚洲国产1区| 老司机精品久久| 久久久久五月天| 可以免费看不卡的av网站| 好吊视频一区二区三区四区 | 欧美日韩在线视频观看| 亚洲精品黄色| 亚洲美女精品一区| 欧美日韩在线三级| 亚洲一区二区精品在线| 亚洲伊人一本大道中文字幕| 国产精品爱啪在线线免费观看| 亚洲嫩草精品久久| 性欧美xxxx视频在线观看| 永久免费视频成人| 亚洲麻豆国产自偷在线| 国产精品网站视频| 鲁鲁狠狠狠7777一区二区| 美日韩精品免费观看视频| 99综合电影在线视频| 亚洲一区二区三区欧美| 一区二区三区在线免费观看| 91久久夜色精品国产九色| 欧美激情综合色综合啪啪| 亚洲欧美综合一区| 久久一区二区三区四区| 日韩网站在线观看| 西瓜成人精品人成网站| 亚洲日韩第九十九页| 亚洲欧美日韩天堂| 亚洲精品中文字幕在线| 亚洲欧美一区二区三区久久 | 国产精品乱码| 欧美不卡视频一区| 国产精品日韩欧美大师| 巨胸喷奶水www久久久免费动漫| 欧美xxx成人| 久久se精品一区二区| 欧美激情一级片一区二区| 亚洲欧美日韩精品久久久久| 久久人人精品| 欧美一区二区三区在线观看| 免费在线观看精品| 久久婷婷综合激情| 国产精品每日更新在线播放网址| 麻豆精品精华液| 国产精品美女诱惑| 亚洲开发第一视频在线播放| 国产综合色一区二区三区| 亚洲人成在线观看网站高清| 国产一区日韩一区| 亚洲男人第一网站| 亚洲欧美国产精品va在线观看| 欧美大片一区| 欧美成人a视频| 国产在线视频欧美| 亚洲欧美一区在线| 亚洲欧美在线观看| 国产精品扒开腿做爽爽爽软件| 亚洲国产欧美在线| 樱桃视频在线观看一区| 小黄鸭精品aⅴ导航网站入口| 亚洲欧美精品在线| 一本一道久久综合狠狠老精东影业| 在线观看福利一区| 久久久中精品2020中文| 久久精品水蜜桃av综合天堂| 欧美日韩综合网| 夜夜嗨av一区二区三区网站四季av | 国产精品任我爽爆在线播放 | 国产日韩欧美自拍| 亚洲天堂成人| 亚洲永久免费观看| 欧美视频网址| 999在线观看精品免费不卡网站| 亚洲日韩第九十九页| 中文av字幕一区| 一区二区亚洲精品| 久久视频免费观看| 欧美激情在线免费观看| 亚洲国产精品一区二区三区| 免费不卡欧美自拍视频| 欧美激情在线观看| 亚洲精品一品区二品区三品区| 欧美va亚洲va国产综合| 最新国产成人av网站网址麻豆 | 免费视频久久| 久久精品国产77777蜜臀| 亚洲免费在线观看视频| 欧美大片免费久久精品三p| 亚洲国产精品久久久| 亚洲精选视频在线| 欧美日韩一区二区在线播放| 999亚洲国产精| 亚洲欧美日本精品| 国产综合色在线视频区| 麻豆成人91精品二区三区| 亚洲国产精品va在线观看黑人| 日韩一区二区精品视频| 国产精品毛片a∨一区二区三区|国| 亚洲男女自偷自拍| 欧美成人午夜| 亚洲综合久久久久| 激情av一区| 欧美另类久久久品| 久久本道综合色狠狠五月| 欧美成人网在线| 午夜宅男欧美| 欧美电影在线观看| 亚洲一区二区三区视频播放| 国产欧美日韩精品一区| 免费久久99精品国产自| 一二三四社区欧美黄| 久久亚洲捆绑美女| 一本色道久久综合狠狠躁的推荐| 国产日韩欧美在线看| 欧美激情欧美激情在线五月| 在线亚洲一区| 欧美电影在线观看完整版| 先锋资源久久| 亚洲嫩草精品久久| 亚洲欧美一区二区三区在线| 小黄鸭视频精品导航| 亚洲国产欧美在线| 国产精品久久九九| 欧美国产亚洲精品久久久8v| 久久国产66| 亚洲欧美成人一区二区在线电影| 亚洲福利小视频| 久久男人资源视频| 欧美在线一二三四区| 亚洲无亚洲人成网站77777 |