• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 如何用VC++和Visual Foxpro進行ActiveX數據通訊

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    作者:粟利民 孫強 摘要 本文描述了如何利用自動 服務器 Active Automation,在VC++ 中與Visual Foxpro 進行數據通訊的方法。通過自動服務器,圓滿地解決 了各種數據類型的交換問題。 關鍵詞 VC++,Visual Foxpro,ActiveX Automation,數據通訊。 在進行軟
    作者:粟利民 孫強

      摘要 本文描述了如何利用自動服務器 Active Automation,在VC++
    中與Visual Foxpro 進行數據通訊的方法。通過自動服務器,圓滿地解決
    了各種數據類型的交換問題。

      關鍵詞 VC++,Visual Foxpro,ActiveX Automation,數據通訊。

    在進行軟件開發的過程中,如何在不同的編程工具之間進行數據交換和通
    訊,需要進行不斷的探索和總結。我們在開發機械CAD仿真軟件的過程中,
    遇到了在VC++中讀取和修改Visual Foxpro 中數據的問題。經過許多次的
    試驗,我們通過采用自動服務器(ActiveX Automation)的方法圓滿解決
    了這個問題。

      自動服務器, 以前稱為 OLE Automation, 后來稱為 ActiveX OLE
    Automation, 就是編寫能被其他程序調用的代碼。其他程序不是以DLL的
    孤立方式而是直接調用自動服務器的用戶代碼。這其中比較難理解的概念
    是:自動服務器用戶代碼向其他應用程序揭示了屬性(變量)和方法(函
    數)。

      以下將以整型和雙精度(對浮點型同樣適用)的數據傳遞為例,講述
    如何用ActiveX Automation在VC++和Visual Foxpro 之間進行數據通訊,
    例子中的編程工具為VC++ 5.0和Visual Foxpro 5.0。

      一.在Visual Foxpro中創建自動服務器

      1.在Visual Foxpro中定義服務器類(此例中為CDATA類)

      首先在某目錄下新建一工程,在工程管理器中選擇代碼欄,同一目錄
    下新建一程序(如MyServer.prg),并在此程序文件中定義服務器類。

         *File Name: MyServer.prg
         DEFINE CLASS CData AS Custom OLEPUBLIC
          *對VC++而言, para1為整型, para2為double型
          para1=123
          para2=123.123
          PROCEDURE ChangeData
            this.para1=this.para1*2
            this.para2=this.para2*2
            RETURN
          ENDPROC
         ENDDEFINE

      2.將上述程序聯編為可執行程序(如MyServer.exe)

      選中程序MyServer,點擊“連編”按鈕,選擇“連編可執行程序”選
    項,并按確定,便可生成可執行程序。

      二.在VC++中對自動服務器進行測試

      1.關閉Visual Foxpro,在VC++中選擇菜單項“File-New”,再選擇
    “Projects”中的“MFC AppWizard (exe)” 選項,隨后按默認方式生成
    “Dialog Based”的工程項目(此例中工程名為MyTest)。

      2.在MyTest.cpp中的APP類的InitInstance()函數開頭加入OLE使能。

           BOOL CMyTestApp::InitInstance()
          {
               BOOL OleEnable=AfxOleInit();
               if(!OleEnable) return FALSE;
              ……
          }

      3.在ClassWizard中選“Automation”中的“Add Class-From a type
    library”。在“ Import from type library”對話框中找到剛才所創建
    的Visual Foxpro工程目錄下的tlb文件(如MyServer.tlb)并選擇“打開”
    按鈕,會有提示說明將要從Lib中生成CDATA類,點擊OK按鈕加以確認,將
    自動在項目中加入與CDATA類有關的文件MyServer.cpp 和MyServer.h。在
    ClassView 中可查看 CDATA 類的函數,如 GetPara1()、 SetPara1() 和
    CHANGEDATA()等。這里要注意類名CDATA和函數名CHANGEDATA() 的大小寫
    請參看具體的頭文件MyServer.h。

      4.在對話框類(此例中為CMyTestDlg)的頭文件MyTestDlg.h的開頭
    部分,將CDATA類的頭文件MyServer.h包含進來。隨后定義CDATA類的實例
    m_data作為對話框類的成員變量。

      // MyTestDlg.h : header file
      #include "myserver.h"
       ……
      class CMyTestDlg : public CDialog
      {
        // Construction
        public:
           CMyTestDlg(CWnd* pParent = NULL); // standard constructor
        private:
           CDATA m_data; //定義CDATA類的實例m_data
        ……
       }
       ……

      5.在對話框的初始化部分(如InitDialog()函數中)加入

        m_data.CreateDispatch(“MyServer.CDATA);

      6.使用自動服務器的通訊編程

      此例中,我們在對話框中設置一命令按鈕“Test”,通過點擊該按鈕
    來對自動服務器進行測試。

    void CMyTestDlg::OnButtonTest()
    {
        //首先利用CDATA類的GetPara1()等取值函數取出Foxpro中的變量值,
        //再利用CDATA類SetPara1()等賦值函數來修改Foxpro中的這些變量值
        //也可以在VC++中調用CDATA類的函數CHANGEDATA()來修改變量值
        //定義tagVARIANT型變量,請參看有關tagVARINAT的幫助
        tagVARIANT mypara1, mypara2;
        mypara1=m_data.GetPara1();  //讀取Foxpro中的變量值para1
        mypara2=m_data.GetPara2();  //讀取Foxpro中的變量值para2
        //檢驗讀取數據是否正確(Foxpro設定為123和123.123)
        if(mypara1.iVal==123)
           MessageBox("mypara1.iVal=123");
        if(mypara2.dblVal==123.123)
           MessageBox("mypara2.dblVal=123.123");
        //修改這些變量值(也可用調用CHANGEDATA()的方式來修改變量值)
        mypara1.iVal=mypara1.iVal*2; //整型變量乘以2
        mypara2.dblVal=mypara2.dblVal*2.0; //double型變量也乘以2
        m_data.SetPara1(mypara1);   //向Foxpro賦值
        m_data.SetPara2(mypara2);
      //再次讀取Foxpro中的變量值
        mypara1=m_data.GetPara1();
        mypara2=m_data.GetPara2();
        //檢驗修改數據是否正確(應改為246和246.246)
        if(mypara1.iVal==246)
           MessageBox("mypara1.iVal=246");
        if(mypara2.dblVal==246.246)
           MessageBox("mypara2.dblVal=246.246");
    }

      上面講述在VC++中如何與Visual Foxpro 進行整型和雙精度型變量的
    數據通訊的方法。通過查看tagVARIANT結構的幫助文件,可以看到其中有
    一個成員為VARTYPE vt??梢哉fvt是非常重要的,在VC++中讀取Foxpro中
    的數據后,vt 的值就決定了其數據的類型。在上例中,mypara1.vt等于3
    而mypara2.vt等于5,表示它們的數據類型分別為整型和雙精度型。在VC++
    中也可根據tagVARIANT變量的vt值來判斷所讀取的數據的確切類型。我們
    還可以看到,不同類型的數據,在VC++中的訪問方式也有所不同。如整型
    用 iVal,而雙精度型用 dblVal,上例中分別為mypara1.iVal和mypara2.
    dblVal。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>