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

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热这里只有成人精品国产| 先锋影院在线亚洲| 久久综合九色九九| 欧美激情免费观看| 亚洲人成网站在线观看播放| 欧美三级在线| 亚洲精品网址在线观看| 日韩视频精品在线观看| 亚洲视频在线观看三级| 欧美一区二区黄| 亚洲欧美日韩另类精品一区二区三区| 欧美三区在线| 亚洲欧美日韩综合一区| 亚洲视频自拍偷拍| 国产视频欧美视频| 免费毛片一区二区三区久久久| 久久人人爽人人爽爽久久| 亚洲激情专区| av成人毛片| 国产无一区二区| 美女主播一区| 牛夜精品久久久久久久99黑人| 一区二区三区久久久| 一区二区三区毛片| 国产日产精品一区二区三区四区的观看方式 | 亚洲三级国产| 欧美人成网站| 小处雏高清一区二区三区 | 国产精品日韩专区| 久久久蜜臀国产一区二区| 久久亚洲影院| 亚洲视频久久| 久久精品理论片| 亚洲狠狠婷婷| 亚洲视频中文字幕| 亚洲成色www8888| 在线视频欧美精品| 国内精品免费午夜毛片| 亚洲黄色在线| 国产精品色午夜在线观看| 蜜桃精品一区二区三区 | 亚洲人成人99网站| 亚洲天堂网在线观看| 在线观看一区视频| 亚洲在线电影| 亚洲国产成人av好男人在线观看| 99国产精品久久久久久久| 国产一区二区丝袜高跟鞋图片| 亚洲春色另类小说| 国产日韩在线一区| 亚洲美女尤物影院| 亚洲成人在线| 午夜欧美大尺度福利影院在线看| 最新国产乱人伦偷精品免费网站| 久久狠狠亚洲综合| 久久九九国产精品| 欧美视频精品一区| 亚洲丰满在线| 激情视频一区二区| 亚洲在线视频一区| 中文久久精品| 欧美成人一区二区在线| 久久久久.com| 国产欧美亚洲精品| 亚洲天堂网站在线观看视频| 亚洲三级网站| 欧美电影免费观看高清完整版| 久久精品夜色噜噜亚洲a∨| 欧美日韩精品一区二区三区四区| 玖玖玖国产精品| 国产亚洲精品一区二区| 亚洲综合99| 亚洲女女女同性video| 欧美日韩一区二区三区四区在线观看 | 久久综合色婷婷| 国产日韩亚洲欧美| 亚洲欧美精品伊人久久| 亚洲一区精品视频| 欧美小视频在线| 一本色道久久88亚洲综合88| 一本久久综合亚洲鲁鲁| 免费在线播放第一区高清av| 欧美国产亚洲视频| 亚洲国产欧美久久| 欧美成人一品| 亚洲日本视频| 亚洲午夜久久久久久久久电影院| 欧美日韩在线视频首页| 这里只有精品在线播放| 午夜精品久久久| 国产一区二区日韩精品欧美精品| 欧美在线观看视频在线| 欧美成人亚洲成人| 亚洲乱码国产乱码精品精98午夜| 欧美极品一区| 亚洲特级毛片| 久久久在线视频| 亚洲高清免费| 欧美日韩一区二| 午夜精品一区二区三区在线视| 久久久女女女女999久久| 亚洲高清不卡一区| 欧美视频免费在线| 欧美一区二区三区四区在线| 欧美黑人在线观看| 亚洲主播在线| 国产亚洲欧美中文| 欧美aⅴ99久久黑人专区| 99riav国产精品| 久久久久国产精品一区| 亚洲精品美女久久7777777| 欧美日韩视频在线一区二区观看视频| 日韩亚洲视频| 久久久在线视频| 一本久久综合| 黄色国产精品一区二区三区| 欧美激情1区| 亚洲自拍偷拍麻豆| 亚洲黄色成人网| 欧美精品色综合| 亚洲黄色在线| 欧美中文字幕不卡| 亚洲高清123| 欧美屁股在线| 亚洲欧美国产精品专区久久| 免费亚洲婷婷| 亚洲欧美日韩综合国产aⅴ| 伊人狠狠色丁香综合尤物| 欧美日韩在线免费视频| 久久夜色精品| 午夜精品网站| 亚洲毛片在线观看.| 老司机免费视频久久| 中文无字幕一区二区三区| 国产一区二区三区久久悠悠色av| 欧美日韩国产三区| 蜜桃av一区| 午夜一区不卡| 亚洲精品视频在线播放| 美女视频一区免费观看| 羞羞答答国产精品www一本| 亚洲精品一区中文| 一区三区视频| 国产一区二区高清| 国产精品一级在线| 欧美日韩免费在线视频| 蜜臀久久99精品久久久久久9 | 久久久99爱| 午夜伦理片一区| 亚洲视屏一区| 最新亚洲视频| 亚洲国产另类精品专区| 国产亚洲精品aa| 国产精品久久久久7777婷婷| 欧美日韩xxxxx| 欧美绝品在线观看成人午夜影视 | 亚洲最黄网站| 亚洲精品视频在线观看网站| 在线观看免费视频综合| 好吊日精品视频| 国产区二精品视| 国产精品每日更新| 国产精品毛片a∨一区二区三区|国 | 亚洲激情欧美| 亚洲国产影院| 欧美国产在线观看| 欧美成人午夜| 欧美激情一区二区三区在线 | 久久久久国产一区二区三区| 欧美一区二区国产| 久久国产精品久久久久久| 午夜精品三级视频福利| 欧美一区二区三区播放老司机| 欧美一二三视频| 久久久久国产精品人| 久久午夜视频| 欧美黑人一区二区三区| 欧美日韩视频| 国产伦精品一区二区三区高清| 国产乱码精品一区二区三区五月婷 | 免费亚洲一区二区| 欧美成人xxx| 亚洲国产黄色| 在线视频欧美日韩| 欧美在线视频a| 美女久久网站| 欧美三日本三级三级在线播放|