<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      BCB客戶端tuxedo開發案例

      [摘要]tuxedo 的函數很多,所有應用都使用其中子集。這些函數子集包含在開發包中一定的動態庫中。下面以tpinit,tpcall,tpterm,tpfree,tpalloc,Fget32,Fchg32,...
      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);
         即可。
         
      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、編譯。 


      日韩精品一区二区三区高清