快速业务通道

CodeFx:一站式微软开发技术解决方案

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29

晚上在博客堂读完VSTO写的一篇文章,介绍了CodePlex上面的一个项目,叫做 “All-In-One Code Framework”,代号CodeFx,简单的说,就是收集了几乎所有 常见的微软开发技术的示例项目,将其打包到这个框架里,而且还使用各种不同的语言进行 实现。比如创建一个ActiveX控件和COM组件,CodeFx里面使用ATL、MFC、VB、C#来实现同样 的功能。

适合新手入门,也可以作为一份模板供经验丰富的开发者使用,可节省大量的时间。官方 网站上给出了框架的基本结构,如下图所示:

COM组件和ActiveX控件示例

数据访问示例

库示例

进程间通信示例

 

花了2 个小时粗略阅读了代码,记录下学习心得:

1)先来说ActiveX这条线,它里面使用了 ATL(这里有2种实现,进程内和进程外),MFC,C#,VB四种技术来实现。功能就是四点:一个返 回字符串的HelloWorld方法,一个float类型的属性FloatProperty,一个返回进程号和线程 号的GetProcessThreadID方法,一个FloatPropertyChanging事件。

2)授权支持是 ActiveX 控件的一项可选功能,它使您得以控制能使用或分发该控件的人。(请参见《MFC ActiveX 控件:授权 ActiveX 控件》)。

头文件的修改     

“ActiveX 控件向导”将下列代码放置在控件头文件中。声明了 factory 对象的两个成员函数,其中一个成员函数验证控件 .LIC 文件是否存在,而另一个成员函数 则对包含该控件的应用程序中使用的许可证密钥进行检索:

BEGIN_OLEFACTORY(CMFCActiveXCtrl)  // Class factory and guid
   virtual BOOL VerifyUserLicense();
   virtual BOOL GetLicenseKey(DWORD, BSTR FAR*);
END_OLEFACTORY(CMFCActiveXCtrl)

实现文件的修改

“ActiveX 控件向导”将下面两条语句放置在控件实现文件中,以声明许 可文件名和许可字符串:

static const TCHAR BASED_CODE _szLicFileName[] =
   _T("License.lic");
static const WCHAR BASED_CODE _szLicString[] =
   L"Copyright (c) 2000 ";

注意:如果以任何方式修改 szLicString,则必须也修改控件 .LIC 文件的第一行,否则授权将无法正确运行。

“ActiveX 控件向导”将下列代码放置在控件实现文件中,以定义控件类 的 VerifyUserLicense 函数和 GetLicenseKey 函数:

// CMFCActiveXCtrl::CMFCActiveXCtrlFactory::VerifyUserLicense -
// Checks for existence of a user license

BOOL CMFCActiveXCtrl::CMFCActiveXCtrlFactory::VerifyUserLicense()
{
    return AfxVerifyLicFile(AfxGetInstanceHandle(), _szLicFileName,
        _szLicString);
}

// CMFCActiveXCtrl::CMFCActiveXCtrlFactory::GetLicenseKey -
// Returns a runtime licensing key
BOOL CMFCActiveXCtrl::CMFCActiveXCtrlFactory::GetLicenseKey(DWORD dwReserved,
    BSTR FAR* pbstrKey)
{
    if (pbstrKey == NULL)
        return FALSE;
    *pbstrKey = SysAllocString(_szLicString);
    return (*pbstrKey != NULL);
}

最后,“ActiveX 控件向导”修改控件项目 .IDL 文件。将关键 字 licensed 添加到控件的 coclass 声明中,如下例所示:

[ uuid (E389AD6C-4FB6-47AF-B03A-A5A5C6B2B820), licensed,
      helpstring("MFCActiveX Control"), control ]
    coclass MFCActiveX

3)作者封装了一个方法AutoWrap来调用COM组件 公开出来的属性或方法。

HRESULT AutoWrap(int autoType, VARIANT *pvResult, IDispatch *pDisp, 
LPOLESTR ptName, int cArgs)
{
// Begin variable-argument list
va_list marker;

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号