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

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>
            午夜性色一区二区三区免费视频| 国产精品夜色7777狼人| 久久综合色婷婷| 亚洲视频在线看| 中文精品视频| 蜜乳av另类精品一区二区| 久久综合狠狠综合久久激情| 亚洲愉拍自拍另类高清精品| 亚洲小说欧美另类社区| 亚洲一区二区视频在线| 午夜精品网站| 久久精品视频va| 免费成人黄色av| 欧美亚洲第一区| 国内外成人免费视频 | 欧美高清在线播放| 亚洲茄子视频| 亚洲欧美国产制服动漫| 久久免费视频网| 欧美人与性动交a欧美精品| 国产精品裸体一区二区三区| 狠狠久久亚洲欧美| 亚洲最新在线视频| 久久久精品国产一区二区三区| 模特精品在线| 亚洲视频欧美在线| 久久一区免费| 国产精品视频自拍| 亚洲日本在线观看| 久久国产精品99国产| 亚洲国产精品传媒在线观看| 亚洲一区二区三区久久| 另类天堂av| 国产精品亚洲аv天堂网| 日韩系列欧美系列| 在线免费观看视频一区| 亚洲一区二区3| 蜜桃av综合| 亚洲一二三区在线观看| 老司机一区二区| 国产区欧美区日韩区| 狠狠色丁香久久婷婷综合_中| 在线播放日韩欧美| 日韩网站免费观看| 欧美freesex8一10精品| 亚洲精品欧美一区二区三区| 久久综合伊人77777| 欧美国产精品| 欧美在线一级视频| 国产精品国产三级国产aⅴ入口 | 另类国产ts人妖高潮视频| 国产精品久久一区二区三区| 亚洲精品乱码久久久久久黑人| 久久久人成影片一区二区三区观看 | 亚洲精品久久久久久久久久久久久| 欧美一级在线播放| 亚洲女同在线| 欧美日韩一区二区三区在线看 | 欧美激情视频网站| 久久久久国产一区二区三区四区 | 黄色国产精品| 久久综合给合久久狠狠色| 欧美一区二区在线观看| 国产精品一二三| 欧美一区二区在线视频| 中文在线资源观看视频网站免费不卡| 久久精品免费| 在线不卡中文字幕| 免费不卡中文字幕视频| 久久婷婷久久一区二区三区| 一区二区三区在线视频播放| 美国成人毛片| 欧美α欧美αv大片| 99国产精品久久久久久久成人热| 亚洲欧洲三级电影| 欧美日韩三级| 欧美一区二区国产| 久久久久国色av免费看影院| 激情一区二区| 亚洲欧洲美洲综合色网| 国产精品高潮在线| 久久精品国产第一区二区三区| 先锋影院在线亚洲| 亚洲国产日韩一级| 一本色道久久| 国产精品色在线| 99精品欧美一区二区三区| 亚洲欧美日韩一区| 欧美偷拍另类| 久久久久久一区二区| 久久理论片午夜琪琪电影网| 亚洲激情成人在线| 亚洲午夜精品一区二区三区他趣| 国产精品美女999| 美日韩精品免费| 欧美日韩在线视频一区二区| 欧美一区二区三区四区在线| 久久美女艺术照精彩视频福利播放| 日韩亚洲一区二区| 欧美一区二区在线| 在线亚洲精品福利网址导航| 亚洲男人的天堂在线观看| 亚洲高清不卡一区| 亚洲图片在区色| 亚洲精品一区中文| 欧美在线视频二区| 一区二区三区国产盗摄| 午夜精品网站| 亚洲免费影院| 欧美日本一区| 免费在线成人av| 国产精品一区二区a| 国产精品毛片在线看| 欧美成年人网站| 国产精品永久入口久久久| 亚洲国产欧美另类丝袜| 国产亚洲激情在线| 亚洲私人影吧| 一区二区三区免费看| 欧美一区二区免费视频| 日韩视频二区| 欧美黄色免费| 性欧美xxxx大乳国产app| 欧美福利电影在线观看| 久久视频一区| 国产精品日韩在线观看| 亚洲欧洲一区二区三区久久| 在线观看视频一区二区| 性欧美长视频| 亚洲欧美视频一区| 欧美视频观看一区| 亚洲高清久久网| 亚洲第一黄色网| 久久精品夜色噜噜亚洲a∨| 久久福利毛片| 国产午夜精品全部视频播放| 亚洲自拍电影| 久久高清国产| 激情欧美一区二区三区| 久久av免费一区| 久久这里只有精品视频首页| 国产一区日韩欧美| 久久精品综合一区| 欧美成人四级电影| 亚洲日本中文| 欧美屁股在线| 日韩视频一区二区三区| 亚洲欧美日韩在线| 国产精品免费观看视频| 香蕉久久夜色精品| 免费在线观看精品| 99成人在线| 国产精品一区二区三区乱码 | 亚洲欧美日韩国产精品| 国产精品av久久久久久麻豆网| 夜夜精品视频| 亚洲欧洲日韩女同| 亚洲国产精品久久精品怡红院| 久久精品国产精品亚洲| 久久网站免费| 亚洲日韩欧美视频一区| 欧美日本国产| 亚洲一区二区三区四区五区午夜| 亚洲自拍偷拍福利| 国产亚洲欧洲| 欧美激情精品久久久久久变态 | aa成人免费视频| 国产精品va在线| 久久成人精品一区二区三区| 美国十次成人| 亚洲午夜国产成人av电影男同| 国产农村妇女毛片精品久久莱园子| 欧美一区二区精品久久911| 欧美激情一区二区久久久| 亚洲男人av电影| 在线播放一区| 欧美亚男人的天堂| 久久精品视频在线观看| 亚洲第一页在线| 久久精品国产v日韩v亚洲 | 久久免费黄色| 亚洲精品久久久久久久久久久| 国产一区自拍视频| 亚洲国产欧美在线人成| 欧美+日本+国产+在线a∨观看| 亚洲国产激情| 久久久国产精彩视频美女艺术照福利| 国产欧美另类| 一区二区三区偷拍| 国产精品每日更新在线播放网址| 欧美日韩在线播放一区| 亚洲精品久久久蜜桃| 亚洲日本中文| 欧美性大战久久久久久久蜜臀| 欧美福利在线| 亚洲国产婷婷香蕉久久久久久| 在线综合视频| 亚洲综合色噜噜狠狠| 欧美日本高清视频| 一区二区欧美精品|