前不久,Inprise公司(原Borland公司)正式公布了Delphi 5.0版,其開發嚮導中支援了“控制台程式(CPL)”架構的產生,利用它可以快速、方便地開發CPL程式。那麼是否能在現有的Borland C++ Builder 中開發CPL程式呢?
CPL程式是動態連結程式庫(DLL)的一種變形,只不過副檔名為.cpl、入口函數為CPlApplet()而不是DllEntryPoint()罷了(並不是不要DllEntryPoint(),不然不能編譯)。我們只需在BCB4.0中選擇“File|New...”開啟開發嚮導,選擇“DLL”產生一個DLL架構,並在其中加入一個函數CPlApplet()就可以了。為了快速地說明問題,筆者先給出一個最簡單的例子程式,然後再來解說。
#include <vcl.h>
#include <cpl.h>
#include <cplext.h>
#pragma hdrstop
USERES("my.res");//這是我加入的資源檔,其中有一個表徵圖
extern"C" __declspec(dllexport) long CALLBACK __stdcall CPlApplet(HWND hwndCPL,UINT uMsg,LPARAM lParam1,LPARAM lParam2);
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
return 1;
}
long CALLBACK __declspec(dllexport) __stdcall CPlApplet(HWND hwndCPL,UINT uMsg,LPARAM lParam1,LPARAM lParam2)
{
LPNEWCPLINFO mycpl;//LPNEWCPLINFO結構可在CPL.H標頭檔中查看
long result=0;
switch (uMsg)//判斷傳來的資訊
{
case CPL_INIT:// 第一個資訊,在控制台調入時產生
result=1;
break;
case CPL_GETCOUNT://第二個資訊,在控制台調入時產生
result=1;
break;
case CPL_INQUIRE://第三個資訊,當控制台查詢時產生
result=0;
break;
case CPL_NEWINQUIRE://第三個資訊,當控制台查詢時產生
mycpl=LPNEWCPLINFO (lParam2);// 將lParam2中的指標傳給mycpl
mycpl->dwSize=sizeof(NEWCPLINFO);
mycpl->dwFlags=0;//標誌變數 一般設為0
mycpl->dwHelpContext=0;//協助控制代碼一般設為0
mycpl->lData=0;
mycpl->hIcon=(HICON)LoadIcon(HInstance,"MyIcon");
mycpl->szHelpFile[0]='\0';//協助檔案
StrCopy(mycpl->szName,"BCB控制台示範程式");//在表徵圖下顯示的解說文字
StrCopy(mycpl->szInfo,"用BCB開發自己的控制台程式");// 在控制台狀態列中顯示的說明資訊
result=0;
break;
case CPL_DBLCLK://當表徵圖被雙擊時
ShowMessage("這是一個CPL實驗程式");
result=0;
break;
case CPL_STOP://當使用者關閉自已的程式時產生
result=1;
break;
case CPL_EXIT:// 當控制台關閉時產生,系統使用FreeLibrary()釋放
result=0;
break;
default:
break;
}
return result;
}