n 編寫步驟:
1. 新建一個標准工程,工程名設置為VBTestVCComProj;引入組件,選擇菜單Project->References…,點擊浏覽,選擇C:ValidateCreditCardServerDebug ValidateCreditCardServer.dll;敲入如下窗體代碼(別忘了在窗體上放兩個文本框和一個按鈕哦)。
Private Sub Command1_Click()
Dim comobj As New VALIDATECREDITCARDSERVERLib.ValidateCard
If comobj.ValidateCreditCard(Text1.Text, Text2.Text) = 1 Then
MsgBox "valid card"
Else
MsgBox "invalid card"
End If
End Sub
2. 編繹運行測試程序。
n 代碼測試:同上(略)。
n Visual C++調用Visual C++組件
在這裡我不再詳細介紹步驟了,相信通過前面兩個例子介紹,你應該掌握了其具體的操作要點。在這裡我只扼要地提一下綱領。
1. 使用Visual C++創建一個基於對話框的應用程序,工程名為VCTestVCComProj,同上面幾個測試工程一樣,在對話框上面放置兩個文本框和一個確定按鈕。
2. 在客戶端中導入服務器的類型庫
2-1在 StdAfx.h 文件中加入代碼
#import "..ValidateCreditCardServerValidateCreditCardServer.tlb"
或
#import "..ValidateCreditCardServerDebugValidateCreditCardServer.dll"
這兩種方法都可以!
2-2編譯 StdAfx.cpp,產生包裝類,即在客戶工程空間中輸出目錄(C:VCTestVCComProjDebug)中創建的兩個文件:類型庫頭文件(ValidateCreditCardServer.tlh)和類型庫實現文件(ValidateCreditCardServer.tli)。
2-3對話框訪問服務器組件的功能需要使用服務器包裝類名字空間。為此,在VCTestVCComProjDlg.cpp文件頭部中增加如下的語句:
using namespace VALIDATECREDITCARDSERVERLib;
3. 初始化COM庫
4. 獲得服務器的CLSID
5. 創建COM服務器組件的實例
6. 使用COM對象
7. 終止COM庫
VCTestVCComProjDlg.cpp清單
--------------------------------------------------------------------------------
// VCTestVCComProjDlg.cpp : implementation file
//
#include "stdafx.h"
#include "VCTestVCComProj.h"
#include "VCTestVCComProjDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
using namespace VALIDATECREDITCARDSERVERLib;
…
BEGIN_MESSAGE_MAP(CVCTestVCComProjDlg, CDialog)
//{{AFX_MSG_MAP(CVCTestVCComProjDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
…
void CVCTestVCComProjDlg::OnButton1()
{
// TODO: Add your control notification handler code here
HRESULT hr=CoInitialize(NULL);// 初始化COM庫
CLSID clsid;
hr=CLSIDFromProgID(OLESTR("ValidateCreditCardServer.ValidateCard"),&clsid);// 獲得服務器的CLSID
IValidateCard * cardptr;
hr=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(IValidateCard),(LPVOID *)&cardptr);
if(FAILED(hr))
{
AfxMessageBox("Server Creation Failed");
return;
}//創建COM服務器組件的實例
char cCardNum[20],cCardType[10];
GetDlgItemText(IDC_EDIT1,cCardNum,20);
GetDlgItemText(IDC_EDIT2,cCardType,10);
_bstr_t bstCardNum(cCardNum),bstCardType(cCardType);
long lStatus;
lStatus=cardptr->ValidateCreditCard(bstCardNum,bstCardType);
if(lStatus==1)
AfxMessageBox("valid card");
else
AfxMessageBox("invalid card"); //使用COM對象
CoUninitialize();//終止COM庫
}
--------------------------------------------------------------------------------
8. 編繹運行測試程序。
n 代碼測試:同上(略)。