用 C++ 編寫 FLL 來增強 VFP 的功能
要創建一個 FLL 檔:
1 啟動 VC++ 6.0
2 從檔功能表中選擇“新建”,並選擇“工程”選項卡中的 Win32 Dynamic-Link Library。
然後在選項卡右邊的工程文字方塊中輸入工程名稱(我們就輸入 first 好了)。
按一下位置文字方塊右邊的三點按鈕來選擇我們的工程所在的位置,我們就選擇 C: 根目錄就行了。注意:
在我們的示例中,我們選擇工程所在位置是 C: 根目錄,工程名稱是 first, 這樣, C++ 將自動為我們創建一個 C:\first 目錄,並為我們生成專案必須的檔。
在選擇了所在位置和項目名稱後,按一下“確定”按鈕。
3 當 C++ 問我們要創建何種類型的 DLL 時,選擇第二個選項“A simple DLL project”並按一下完成按鈕。再按一下一次確定來完成嚮導生成。
好了,C++ 已經為我們生成了一個簡單的 DLL 項目了,讓我們進一步地設置它以符合我們的要求。
首先,從 VFP 6 的主目錄下的 API 目錄下複製 PRO_EXT.H 和 WINAPIMS.LIB 兩個檔到我們的 c:\first 目錄中。(注意:如果用 VFP 8.0 帶的這兩個檔,在編譯時會發生錯誤:不能找到庫 atls.lib).
在 C++ 中,從查看功能表中選擇“工作區”來查看我們的專案檔案,按一下 FileView 選項卡(注意:該選項卡在頁框的下部)。逐個點開各節點,你會看到在 Source File 節點下有兩個文件:first.cpp 和 StdAfx.cpp,用以下內容完全覆蓋 first.cpp 的內容。
//=================================================
#include "pro_ext.h"
void myfirstfunction(ParamBlk* parm)
{
_Execute("wait window \x022 Hello, world!\x022 AT 25,75");
}
FoxInfo myFoxInfo[] = {
{"FIRSTFUN",(FPFI) myfirstfunction,CALLONLOAD, ""},
};
extern "C" {
FoxTable _FoxTable =
{
(FoxTable *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};
}
//=================================================
完成後不要忘記按一下工具列上的 Save All 按鈕來保存你的修改。
接下來讓我們設置連接選項:
1 從“工程”功能表中選擇“設置”功能表項目,按一下 C/C++ 選項卡,並從“分類”下拉下拉式列示方塊中選擇“Precompiled Headers”然後複選 “自動使用預補償頁眉”選項。
2 在該頁下面的 “Project Options” 內容的最後面加一行內容:
/MD
3 按一下 Link 選項卡,在“物件/庫模組”文字方塊中列出的庫模組的最後加上 WINAPIMS.LIB
注意,各模組庫之間要有空格分開,換句話說,你加入的 WINAPIMS.LIB 應該與前面的模組名之間保持一個空格。
4 在此頁上面的“輸出檔案名”文字方塊中,修改輸出檔案名從 Debug/first.dll 到 Debug/first.fll
最後,讓我們來生成我們的 first.fll 文件:
從“編譯”功能表中選擇“構建 first.fll”或按 F7 來構建我們的 first.fll。如果沒有什麼錯誤的話,螢幕下面的視窗中會顯示:
--------------------Configuration: first - Win32 Debug--------------------
first.Fll - 0 error(s), 0 warning(s)
這表明我們的 first.fll 已經生成於 c:\first\debug 目錄中。
測試我們的 fll 檔:
進入 VFP, 在命令視窗打入:
set library to c:\first\debug\first.fll
如果一切正常,則會在螢幕的中部顯示一條 Hello, World! 的信息。
請注意,如果你在修改和調試你的 fll,請一定記住及時發佈來帶參數的 set library to 命令來從記憶體中清除載入的 fll, 否則,在 C++ 中
就不能重建這個 fll.
好了,這個簡單的 fll 需然後沒有做什麼事,但我們已經知道如何創建一個簡單的 FLL 的具體步驟,今後我們將繼續討論其它一些我們必須要掌握的東西。
今天就到這裡。
未完待續......