首页
社区
课程
招聘
将一段MFC代码转换成C++代码?
发表于: 2009-7-29 17:02 6614

将一段MFC代码转换成C++代码?

2009-7-29 17:02
6614
下面的代码是<<加密解密>>第一版随书光盘 关于计算MD5的一段代码:

我的问题是:由于我是在标准C++下编程,但最后计算MD5的代码是MFC下实现的,我该如何修改下面的代码

//User interface:        Caculate MD5 value of target file name
//                                        and return in CString style
CString MD5_Caculate_File ( CString szFileName )
{
        CString MD5_Value_String = "" ;

        HANDLE hFile = CreateFile ( szFileName, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, \
                NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ) ;
        if ( hFile == INVALID_HANDLE_VALUE )
        {
                MD5_Value_String.Format ( "CreateFile Error ( code:%d )!", GetLastError() );
                return MD5_Value_String;
        }

        HANDLE hFileMap = CreateFileMapping ( hFile, NULL, PAGE_READWRITE, 0, 0, NULL ) ;
        if ( hFileMap == NULL )
        {
                MD5_Value_String.Format ( "CreateFileMapping Error ( code:%d )!", GetLastError() );
                CloseHandle ( hFile ) ;
                return MD5_Value_String ;
        }

        PVOID pMapView = MapViewOfFile ( hFileMap, FILE_MAP_READ, 0, 0, 0 ) ;
        if ( pMapView == NULL )
        {
                MD5_Value_String.Format ( "MapViewOfFile Error ( code:%d )!", GetLastError() );
                CloseHandle ( hFileMap ) ;
                CloseHandle ( hFile ) ;
                return MD5_Value_String ;
        }

        DWORD dwLowDWord = 0, dwHighDWord = 0 ;
        dwLowDWord = GetFileSize ( hFile, &dwHighDWord ) ;

        UINT64 uFileSize = ( dwHighDWord << 32 ) + dwLowDWord ;

        MD5_CONTEXT        MD5_Value ;
        memset ( &MD5_Value, 0, sizeof(MD5_Value) ) ;

        if ( MD5_Caculate( &MD5_Value, (BYTE*)pMapView, uFileSize*8) )
        {
                CString TempString ;
                MD5_Value_String = "" ;
                for ( int i = 0; i < 16; i++ )
                {
                        TempString.Format ( "%02X", ((byte*)&MD5_Value)[i] ) ;
                        MD5_Value_String += TempString ;
                }
        }

        UnmapViewOfFile ( pMapView ) ;
        CloseHandle ( hFileMap ) ;
        CloseHandle ( hFile ) ;

        return MD5_Value_String ;
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
问题主要是 CString 类型 是MFC的类 ,而C++的类是string
2009-7-29 17:03
0
雪    币: 63
活跃值: (17)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
那你自己学学C++ std::string 类.
std::string 类没有format方法
2009-7-29 20:51
0
雪    币: 202
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
rfc1321.txt   里面有C源码..抄一下就行了..

我把这个封装了一下,做成了组件..
2009-7-31 02:31
0
雪    币: 367
活跃值: (20)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
5
CString -> CStdString
2009-7-31 08:11
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
太太太强大了 。。。。。 。  。 。
2009-9-15 12:47
0
雪    币: 219
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
//以下就行了, 返回的 char * 用完了记得 delete[]
char* MD5_Caculate_File ( char* szFileName )
{
  char *MD5_Value_String;
// CString MD5_Value_String = "" ;
  MD5_Value_String=new char[261];

  HANDLE hFile = CreateFile ( szFileName, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, \
    NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ) ;
  if ( hFile == INVALID_HANDLE_VALUE )
  {
    sprintf(MD5_Value_String,"CreateFile Error ( code:%d )!", GetLastError());
    //MD5_Value_String.Format ( "CreateFile Error ( code:%d )!", GetLastError() );
    return MD5_Value_String;
  }

  HANDLE hFileMap = CreateFileMapping ( hFile, NULL, PAGE_READWRITE, 0, 0, NULL ) ;
  if ( hFileMap == NULL )
  {
    sprintf(MD5_Value_String,"CreateFileMapping Error ( code:%d )!", GetLastError());
    //MD5_Value_String.Format ( "CreateFileMapping Error ( code:%d )!", GetLastError() );
    CloseHandle ( hFile ) ;
    return MD5_Value_String ;
  }

  PVOID pMapView = MapViewOfFile ( hFileMap, FILE_MAP_READ, 0, 0, 0 ) ;
  if ( pMapView == NULL )
  {
    sprintf(MD5_Value_String,"MapViewOfFile Error ( code:%d )!", GetLastError());
    //MD5_Value_String.Format ( "MapViewOfFile Error ( code:%d )!", GetLastError() );
    CloseHandle ( hFileMap ) ;
    CloseHandle ( hFile ) ;
    return MD5_Value_String ;
  }

  DWORD dwLowDWord = 0, dwHighDWord = 0 ;
  dwLowDWord = GetFileSize ( hFile, &dwHighDWord ) ;

  UINT64 uFileSize = ( dwHighDWord << 32 ) + dwLowDWord ;

  MD5_CONTEXT  MD5_Value ;
  memset ( &MD5_Value, 0, sizeof(MD5_Value) ) ;

  if ( MD5_Caculate( &MD5_Value, (BYTE*)pMapView, uFileSize*8) )
  {
    //CString TempString ;
    //MD5_Value_String = "" ;
    char *pc = MD5_Value_String;
    for ( int i = 0; i < 16; i++ )
    {
       //TempString.Format ( "%02X", ((byte*)&MD5_Value)[i] ) ;
       //MD5_Value_String += TempString ;
       sprintf(pc,"%02X", ((byte*)&MD5_Value)[i]);
       pc += 2;
    }
  }

  UnmapViewOfFile ( pMapView ) ;
  CloseHandle ( hFileMap ) ;
  CloseHandle ( hFile ) ;

  return MD5_Value_String ;
}
2009-10-11 21:05
0
游客
登录 | 注册 方可回帖
返回
//