n Visual Basic调用Visual C++组件
n 编写步骤:
1. 新建一个标准工程,工程名设置为VBTestVCComProj;引入组件,选择菜单Project->References…,点击浏览,选择C:\ValidateCreditCardServer\Debug\ 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 "..\ValidateCreditCardServer\ValidateCreditCardServer.tlb"
或
#import "..\ValidateCreditCardServer\Debug\ValidateCreditCardServer.dll"
这两种方法都可以!
2-2编译 StdAfx.cpp,产生包装类,即在客户工程空间中输出目录(C:\VCTestVCComProj\Debug)中创建的两个文件:类型库头文件(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 代码测试:同上(略)。