ITPub博客

首页 > 应用开发 > IT综合 > Developing COM Components using VC-ATL(3-6) (转)

Developing COM Components using VC-ATL(3-6) (转)

原创 IT综合 作者:amyz 时间:2007-08-17 10:55:07 0 删除 编辑
Developing COM Components using VC-ATL(3-6) (转)[@more@]

XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

n  Visual Basic调用Visual C++组件

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  代码测试:同上(略)。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10752019/viewspace-963669/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    3982
  • 访问量
    7896813