这是俺在这里提的第一个问题……居然在“程序员大本营”中无人回答?………sad……

解决方案 »

  1.   

    多谢阿斯,不过我是指能否象基于MFC的一样,有个什么选项之类的东东,然后,大量的重复代码工作就自动完成了,如果还是得自己实现IClassFactory2………咳咳,我也就就不发帖子问了……
      

  2.   

    我俺自己把这个问题解决了……①在相应控件的类声明处加上:
    public:
       DECLARE_CLASSFACTORY2(CMyLicense)
                  ~~~~~~~~~~这个名字是自己取的
    ②然后实现CMyLicense这个类,比如:
    class CMyLicense
    {
    protected:
       static BOOL VerifyLicenseKey(BSTR bstr)
       {
          //这个函数是判断bstr是否是许可字串的。不依赖于.lic文件。
          //当然,怎么写是自己的自由
       }   static BOOL GetLicenseKey(DWORD dwReserved, BSTR* pBstr) 
       {
          //这个函数是用来返回一个正确的license字串的,返回的内容不依赖于.lic文件
          //但是,是否是在本控件有license的情况下才返回正确的字串?这个问题还不清楚
       }   static BOOL IsLicenseValid()
       {
          //这个函数是判断是否存在相应的.lic文件,并检查文件内容是否正确的
          //换句话说,这是design-time license的判断函数
       }
    };
      

  3.   

    to:null_or_nil,
    给个例子吧,我也想知道,上面这样的说明太含糊了,还是不知道该怎么写!
    我的邮件地址:[email protected]
    谢谢!!!!!!
      

  4.   

    to:itk(itk)BOOL CMyLicense::VerifyLicenseKey(BSTR bstr)
    {
       USES_CONVERSION;
       return !lstrcmp(OLE2T(bstr), _T("My run-time license key"));
    }BOOL CMyLicense::GetLicenseKey(DWORD dwReserved, BSTR* pBstr) 
    {
       USES_CONVERSION;
       *pBstr = SysAllocString( T2OLE(_T("My run-time license key"))); 
       return TRUE;
    }BOOL CMyLicense::IsLicenseValid()
    {
       TCHAR szPath[_MAX_PATH];
       LPTSTR pszTemp;
       HMODULE hMod=GetModuleHandle(TEXT("testLic.ocx"));
       GetModuleFileName(hMod,szPath,_MAX_PATH);
       pszTemp=_tcsrchr(szPath, '.')+1;
       lstrcpy(pszTemp,TEXT("lic"));
       HANDLE hFile;
       BOOL found;
       hFile=CreateFile(szPath,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);   if (INVALID_HANDLE_VALUE==hFile) return FALSE;   /*这就打开了相应的lic文件了,然后怎么读里面
       的内容,再判断是不是合法内容就是你的事情了*/
       CloseHandle(hFile);
       return TRUE;//是合法的license就返回TRUE
    }