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

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>
            久久婷婷亚洲| 久久电影一区| 亚洲视屏一区| 日韩网站在线看片你懂的| 亚洲精品欧美精品| 久久香蕉国产线看观看av| 久久丁香综合五月国产三级网站| 午夜精品久久久久久久99水蜜桃 | 亚洲视频免费| 中文在线资源观看网站视频免费不卡 | 免费在线看一区| 欧美成人精品h版在线观看| 老色鬼久久亚洲一区二区 | 欧美日本在线观看| 欧美性天天影院| 国产精品美女久久福利网站| 国产日韩一区二区三区在线播放| 一区二区在线不卡| 日韩西西人体444www| 亚洲午夜在线观看视频在线| 久久国产夜色精品鲁鲁99| 裸体歌舞表演一区二区| 亚洲三级影院| 亚洲午夜电影| 久久久xxx| 欧美性猛交99久久久久99按摩| 欧美在线亚洲在线| 欧美日韩国产免费| 激情成人在线视频| 亚洲欧美日韩在线一区| 欧美成人精品在线观看| 亚洲欧美在线看| 欧美国产日产韩国视频| 国产精品日韩久久久久| 亚洲精品欧美一区二区三区| 久久国产福利| 亚洲少妇自拍| 欧美日韩精品一区二区在线播放 | 久久精品卡一| 国产精品欧美精品| 亚洲精品欧美极品| 欧美成人伊人久久综合网| 亚洲欧美中文日韩在线| 欧美日韩在线不卡| 日韩视频免费在线| 欧美成人一区二区在线| 欧美在线不卡视频| 国产精品极品美女粉嫩高清在线| 亚洲激情视频网站| 免费美女久久99| 性做久久久久久久免费看| 国产精品国产成人国产三级| 亚洲国产网站| 另类图片综合电影| 久久久噜噜噜久久狠狠50岁| 国内伊人久久久久久网站视频| 亚洲在线免费视频| 亚洲日本激情| 欧美日韩激情网| 久久久www成人免费精品| 亚洲美女av网站| 欧美黄色免费| 久久精品99国产精品酒店日本| 国产欧美日本一区视频| 欧美专区福利在线| 欧美在线免费| 国产精品视区| 欧美一区二区三区视频在线观看| 亚洲婷婷综合色高清在线| 欧美午夜国产| 欧美一区二区大片| 欧美一级理论性理论a| 国产日韩欧美高清| 久久综合九色| 欧美激情免费在线| 中日韩高清电影网| 午夜一区在线| 最新国产成人av网站网址麻豆 | 亚洲伊人伊色伊影伊综合网| 日韩视频在线播放| 国产精品国产三级国产专区53| 亚洲欧美视频在线观看视频| 欧美在线在线| 亚洲高清视频一区二区| 亚洲二区在线观看| 欧美国产激情二区三区| 日韩一区二区福利| 亚洲一区国产一区| 激情久久婷婷| 亚洲国产精品久久久久秋霞蜜臀| 欧美另类变人与禽xxxxx| 午夜性色一区二区三区免费视频 | 欧美中文在线观看国产| 中文日韩在线| 亚洲第一在线综合网站| 欧美日韩激情小视频| 久久激五月天综合精品| 欧美激情1区| 久久国产精品免费一区| 欧美成在线视频| 欧美与欧洲交xxxx免费观看| 久久综合亚州| 午夜精品成人在线| 欧美电影免费网站| 久久久亚洲精品一区二区三区| 欧美好骚综合网| 久久久水蜜桃| 欧美日韩一区二区三区免费| 麻豆国产精品一区二区三区| 欧美日韩免费观看一区| 美女视频网站黄色亚洲| 国产精品男gay被猛男狂揉视频| 欧美激情1区2区3区| 国产日韩欧美在线播放| 一区二区三区四区五区在线| 亚洲国产三级| 午夜日本精品| 亚洲私人影院在线观看| 狂野欧美一区| 欧美成人国产一区二区| 国产一区二区三区高清在线观看| 99国产精品99久久久久久| 91久久嫩草影院一区二区| 欧美一区二区视频网站| 亚洲欧美99| 国产精品对白刺激久久久| 日韩五码在线| 亚洲综合首页| 免费亚洲婷婷| 欧美成人首页| 亚洲国产精品小视频| 欧美专区18| 久久超碰97中文字幕| 国产精品一区二区三区免费观看| 亚洲品质自拍| 99re热精品| 欧美人成免费网站| 亚洲青涩在线| 99成人精品| 欧美日韩理论| 99精品视频免费全部在线| av成人老司机| 国产精品成人v| 亚洲一区二区三区四区在线观看 | 欧美女激情福利| 亚洲日本中文字幕| 一片黄亚洲嫩模| 国产精品99一区| 亚洲一级特黄| 久久久久国色av免费观看性色| 国产精品揄拍500视频| 亚洲男女自偷自拍| 欧美在线视频全部完| 国产精品入口尤物| 欧美制服丝袜第一页| 美女精品在线| 99国内精品久久| 国产精品色在线| 久久精品亚洲一区二区| 欧美高清视频在线 | 久久看片网站| 国内精品视频666| 欧美va亚洲va日韩∨a综合色| 91久久精品一区二区别| 中国成人亚色综合网站| 国产欧美一区二区精品仙草咪| 欧美在线|欧美| 亚洲精品网站在线播放gif| 欧美一区二区在线看| 激情婷婷久久| 国产精品视频1区| 六月婷婷久久| 日韩视频第一页| 国产欧美日韩| 欧美韩国一区| 欧美一区二区三区电影在线观看| 久久精品视频网| 91久久精品国产91久久| 国产精品久久福利| 久久亚洲精品欧美| 夜夜嗨av一区二区三区网页 | 久久久水蜜桃| 亚洲自拍都市欧美小说| 韩国精品在线观看| 欧美国产精品v| 久久精品夜色噜噜亚洲a∨| 日韩一区二区精品| 欧美成人蜜桃| 久久精品国产清自在天天线| 亚洲日本免费电影| 国产精品日韩欧美一区二区三区| 欧美成人在线网站| 久久福利资源站| 亚洲一区二区在线免费观看视频| 亚洲国产视频直播| 欧美成人影音| 久久久久国产一区二区三区| 亚洲——在线| 一区二区三区|亚洲午夜| 亚洲第一毛片|