如题 我没有分,也不懂C++有个C++的小程序 希望大侠能帮忙转换成D的代码不多有能力的留下QQ,要求转换为D保证能用少量收费也可以  太黑的就不要来了

解决方案 »

  1.   

    你可以做成dll,然后用delphi调啊
      

  2.   

    C++不懂 怎么做DLL而且改成D我还要加功能DLL就没法再修改了
      

  3.   

    #include "stdafx.h"
    #include "AXPUnpack.h"
    #include "AXPFile.h"#ifdef _DEBUG
    #undef THIS_FILE
    static char THIS_FILE[]=__FILE__;
    #define new DEBUG_NEW
    #endifCAXPFile::CAXPFile()
    :m_FileName(TEXT("")),m_hFile(INVALID_HANDLE_VALUE), m_hFileMap(NULL),\
    m_hMapView(NULL), m_dwFileSize(-1), m_lpAxPHeader(NULL), m_lpAxpHashTable(NULL),\
    m_lpAxpFileInfo(NULL)
    {
    PrepareCryptTable();
    }
    CAXPFile::~CAXPFile()
    {
    Release();
    }BOOL CAXPFile::LoadFile()
    {
    if (!MappingFile())
    {
    return FALSE;
    }

    m_lpAxPHeader = (AXPHeader*) m_hMapView;
    if (m_lpAxPHeader->signature != AXP_SIGNATURE || m_lpAxPHeader->nUnknow0 != 0x00010001)
    {
    AfxMessageBox(TEXT("文件格式错误!"));
    Release();
    return FALSE;
    }

    m_lpAxpHashTable = (AXPHashTable**)((DWORD)m_hMapView + m_lpAxPHeader->nHashTableOffset);
    m_lpAxpFileInfo = (AXPFileInfo**)((DWORD)m_hMapView + m_lpAxPHeader->nIndexTableOffset);

    if (IsBadReadPtr((LPVOID)m_lpAxpHashTable, 0x60000) ||\
    IsBadReadPtr((LPVOID)m_lpAxpFileInfo, m_lpAxPHeader->nSizeOfIndexTable))
    {
    Release();
    return FALSE;
    }

    if (!GetFileList())
    {
    AfxMessageBox(TEXT("获取文件列表失败!"));
    Release();
    return FALSE;
    }

    return TRUE;
    }void CAXPFile::UnLoad()
    {
    Release();
    }BOOL CAXPFile::MappingFile()
    {
    BOOL bResult = FALSE;

    Release();

    if (m_FileName.IsEmpty())
    {
    return bResult;
    }

    __try 
    {
    m_hFile = CreateFile(m_FileName, GENERIC_READ, FILE_SHARE_READ,\
    NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

    if (INVALID_HANDLE_VALUE == m_hFile)
    {
    ShowErrorMessage();
    __leave;
    }

    m_dwFileSize = GetFileSize(m_hFile, NULL);

    if (m_dwFileSize == -1 || m_dwFileSize == 0)
    {
    CloseHandle(m_hFile);
    m_hFile = INVALID_HANDLE_VALUE;
    __leave;
    }
    m_hFileMap = CreateFileMapping(m_hFile, NULL, PAGE_READONLY, 0, 0, NULL);

    if (NULL == m_hFileMap)
    {
    ShowErrorMessage();
    Release();
    __leave;
    }

    m_hMapView = MapViewOfFile(m_hFileMap, FILE_MAP_READ, 0, 0, 0);

    if (NULL == m_hMapView)
    {
    ShowErrorMessage();
    Release();
    __leave;
    }

    bResult = TRUE;
    }
    __except(EXCEPTION_EXECUTE_HANDLER)
    {
    ShowErrorMessage();
    Release();
    }

    return bResult;
    }void CAXPFile::SetFileName(LPCTSTR lpFileName)
    {
    m_FileName = lpFileName;
    }void CAXPFile::ShowErrorMessage()
    {
    LPVOID lpMsgBuf;
    DWORD dw = GetLastError(); 

    FormatMessage(
    FORMAT_MESSAGE_ALLOCATE_BUFFER | 
    FORMAT_MESSAGE_FROM_SYSTEM,
    NULL,
    dw,
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
    (LPTSTR) &lpMsgBuf,
    0, NULL );

    AfxMessageBox((LPCTSTR)lpMsgBuf, MB_OK | MB_ICONERROR);

    LocalFree(lpMsgBuf);
    }void CAXPFile::Release()
    {
    if (NULL != m_hMapView)
    {
    UnmapViewOfFile(m_hMapView);
    m_hMapView = NULL;
    }

    if (NULL != m_hFileMap)
    {
    CloseHandle(m_hFileMap);
    m_hFileMap = NULL;
    }

    if (INVALID_HANDLE_VALUE != m_hFile)
    {
    CloseHandle(m_hFile);
    m_hFile = INVALID_HANDLE_VALUE;
    }

    m_lpAxpFileInfo = NULL;
    m_lpAxpHashTable = NULL;
    m_lpAxpFileInfo = NULL;
    m_FileList.clear();
    }void CAXPFile::PrepareCryptTable()
    {

    DWORD seed = 0x00100001;
    memset(m_CryptTable, 0, 0x500 * sizeof(DWORD)); DWORD temp1, temp2;
    for (DWORD i = 0; i < 0x100 ; i++)
    {
    seed = (125 * seed + 3) % 0x2AAAAB;
    temp1 = seed << 0x10;
    seed = (125 * seed + 3) % 0x2AAAAB;
    temp2 = 0xFFFF & seed;
    m_CryptTable[i] = temp1 | temp2;

    seed = (125 * seed + 3) % 0x2AAAAB;
    temp1 = seed << 0x10;
    seed = (125 * seed + 3) % 0x2AAAAB;
    temp2 = 0xFFFF & seed;
    m_CryptTable[i + 0x100] = temp1 | temp2;

    seed = (125 * seed + 3) % 0x2AAAAB;
    temp1 = seed << 0x10;
    seed = (125 * seed + 3) % 0x2AAAAB;
    temp2 = 0xFFFF & seed;
    m_CryptTable[i + 0x200] = temp1 | temp2;

    seed = (125 * seed + 3) % 0x2AAAAB;
    temp1 = seed << 0x10;
    seed = (125 * seed + 3) % 0x2AAAAB;
    temp2 = 0xFFFF & seed;
    m_CryptTable[i + 0x300] = temp1 | temp2;

    }

    }
    DWORD CAXPFile::HashString(const char *lpszFileName, DWORD dwCryptIndex)
    { signed char *key = (signed char *)lpszFileName;
    DWORD seed1 = 0x7FED7FED, seed2 = 0xEEEEEEEE;
    signed int ch;

    while(*key != 0)

    ch = *key++;
    seed1 = m_CryptTable[(dwCryptIndex<< 8) + ch] ^ (seed1 + seed2);
    seed2 = ch + seed1 + seed2 + (seed2 << 5) + 3; 
    }

    return seed1; }BOOL CAXPFile::GetHashTablePos(const char *lpszString, int *lpFileOffset, int *lpFileSize)
    {
    const int HASH_A = 1, HASH_B = 2, HASH_OFFSET = 3;  

    int nHashA = HashString(lpszString, HASH_A);
    int nHashB = HashString(lpszString, HASH_B);

    int nHash = HashString(lpszString, HASH_OFFSET);

    nHash &= 0x7FFF;
    int nHashStart = nHash, nHashPos; try
    {
    while (!((nHashPos = ((int*)m_lpAxpHashTable)[nHashStart * 3 + 2]) & 0x80000000) ||\
    nHashA != ((int*)m_lpAxpHashTable)[nHashStart * 3] ||\
    nHashB != ((int*)m_lpAxpHashTable)[nHashStart * 3 + 1])
    {
    nHashStart++;
    nHashStart &= 0x7FFF;
    if (nHashStart == nHash)
    {
    return FALSE;
    }
    }
    }
    catch (...)
    {
    return FALSE;
    } nHashPos &= 0x3FFFFFFF;
    *lpFileOffset = ((int*)m_lpAxpFileInfo)[nHashPos * 3];
    *lpFileSize = ((int*)m_lpAxpFileInfo)[nHashPos * 3 + 1];

    return TRUE;  
    }BOOL CAXPFile::GetFileList()
    {
    m_FileList.clear();
    BOOL bResult = FALSE;
    int nFileOffset, nFileSize;
    try
    {
    if (GetHashTablePos("(list)", &nFileOffset, &nFileSize))
    {
    char* lpBuffer = (char*)((DWORD)m_hMapView + nFileOffset);

    string liststr;   
    vector<string> v;   

    for(int i = 0; i < nFileSize; i++)   
    {   
    if (lpBuffer[i] != 0xD && lpBuffer[i + 1] != 0xA)   
    {   
    liststr += tolower(lpBuffer[i]);   
    }
    else
    {   
    string::size_type loc = liststr.find("|"); 
    if (loc != string::npos)
    {
    m_FileList.push_back(liststr.substr(0, loc));   
    }
    liststr = "" ;   
    i++;
    }   
    }   

    bResult = TRUE;
    }
    }
    catch (...)
    {
    bResult = FALSE;
    }

    return bResult;
    }
    BOOL CAXPFile::GenerateFile(int i, CString &strFileName)
    {
    BOOL bResult = FALSE;
    int nFileOffset, nFileSize;
    CString strMsg;
    HANDLE hFile;
    DWORD dwBytesWritten;
    try
    {
    if (GetHashTablePos(m_FileList[i].c_str(), &nFileOffset, &nFileSize))
    {
    char* lpBuffer = (char*)((DWORD)m_hMapView + nFileOffset);

    hFile = CreateFile(strFileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, \
    CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

    if (hFile == INVALID_HANDLE_VALUE)
    {
    strMsg.Format(TEXT("创建文件失败: %s"), strFileName);
    AfxMessageBox(strMsg);
    return FALSE;
    }
    WriteFile(hFile, (LPVOID)lpBuffer, nFileSize, &dwBytesWritten, NULL);

    if (dwBytesWritten != nFileSize)
    {
    CloseHandle(hFile);
    strMsg.Format(TEXT("写入文件数据不完整: %s"), strFileName);
    AfxMessageBox(strMsg);
    return FALSE;
    } bResult = TRUE;
    }
    else
    {
    AfxMessageBox(TEXT("计算文件索引信息出错!"));
    }
    CloseHandle(hFile);
    }
    catch (...)
    {
    if (hFile != INVALID_HANDLE_VALUE)
    {
    CloseHandle(hFile);
    }

    AfxMessageBox(TEXT("提取文件数据出现错误!"));
    bResult = FALSE;
    }

    return bResult;
    }#include "stdafx.h"
    #include "AXPUnpack.h"#include "MainFrm.h"
    #include "AXPUnpackDoc.h"
    #include "AXPUnpackView.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endifBEGIN_MESSAGE_MAP(CAXPUnpackApp, CWinApp)
    ON_COMMAND(ID_APP_ABOUT, OnAppAbout) ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
    ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
    END_MESSAGE_MAP()CAXPUnpackApp::CAXPUnpackApp()
    {
    }CAXPUnpackApp theApp;
    BOOL CAXPUnpackApp::InitInstance()
    {
    #ifdef _AFXDLL
    Enable3dControls();
    #else
    Enable3dControlsStatic();
    #endif SetRegistryKey(_T("Local AppWizard-Generated Applications")); LoadStdProfileSettings(); 
    CSingleDocTemplate* pDocTemplate;
    pDocTemplate = new CSingleDocTemplate(
    IDR_MAINFRAME,
    RUNTIME_CLASS(CAXPUnpackDoc),
    RUNTIME_CLASS(CMainFrame),       
    RUNTIME_CLASS(CAXPUnpackView));
    AddDocTemplate(pDocTemplate);
    EnableShellOpen();
    RegisterShellFileTypes(TRUE); CCommandLineInfo cmdInfo;
    ParseCommandLine(cmdInfo); if (!ProcessShellCommand(cmdInfo))
    return FALSE;
    m_pMainWnd->ShowWindow(SW_SHOW);
    m_pMainWnd->UpdateWindow(); m_pMainWnd->DragAcceptFiles(); return TRUE;
    }
    class CAboutDlg : public CDialog
    {
    public:
    CAboutDlg(); enum { IDD = IDD_ABOUTBOX }; protected:
    virtual void DoDataExchange(CDataExchange* pDX);   protected: DECLARE_MESSAGE_MAP()
    };CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
    {
    }void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    {
    CDialog::DoDataExchange(pDX);
    }BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)END_MESSAGE_MAP()
    void CAXPUnpackApp::OnAppAbout()
    {
    CAboutDlg aboutDlg;
    aboutDlg.DoModal();
    }
      

  4.   

    #include "stdafx.h"
    #include "AXPUnpack.h"
    #include "AXPUnpackDoc.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endifIMPLEMENT_DYNCREATE(CAXPUnpackDoc, CDocument)BEGIN_MESSAGE_MAP(CAXPUnpackDoc, CDocument)END_MESSAGE_MAP()CAXPUnpackDoc::CAXPUnpackDoc()
    {
    }CAXPUnpackDoc::~CAXPUnpackDoc()
    {
    }BOOL CAXPUnpackDoc::OnNewDocument()
    {
    if (!CDocument::OnNewDocument())
    return FALSE;
    m_AxpFile.UnLoad();
    return TRUE;
    }void CAXPUnpackDoc::Serialize(CArchive& ar)
    {
    }#ifdef _DEBUG
    void CAXPUnpackDoc::AssertValid() const
    {
    CDocument::AssertValid();
    }void CAXPUnpackDoc::Dump(CDumpContext& dc) const
    {
    CDocument::Dump(dc);
    }
    #endif 
    BOOL CAXPUnpackDoc::OnOpenDocument(LPCTSTR lpszPathName) 
    {
    if (!CDocument::OnOpenDocument(lpszPathName))
    return FALSE;

    m_AxpFile.SetFileName(lpszPathName);
    m_AxpFile.LoadFile(); return TRUE;
    }#include "stdafx.h"
    #include "AXPUnpack.h"#include "AXPUnpackDoc.h"
    #include "AXPUnpackView.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endifIMPLEMENT_DYNCREATE(CAXPUnpackView, CListView)BEGIN_MESSAGE_MAP(CAXPUnpackView, CListView)
    ON_WM_CREATE()
    ON_WM_SIZE()
    ON_WM_RBUTTONDOWN()
    ON_COMMAND_RANGE(IDM_ITEM0, IDM_ITEM0, OnPopupMenu)
    END_MESSAGE_MAP()CAXPUnpackView::CAXPUnpackView()
    {
    }CAXPUnpackView::~CAXPUnpackView()
    {
    }BOOL CAXPUnpackView::PreCreateWindow(CREATESTRUCT& cs)
    {
    return CListView::PreCreateWindow(cs);
    }void CAXPUnpackView::OnDraw(CDC* pDC)
    {
    CAXPUnpackDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    }void CAXPUnpackView::OnInitialUpdate()
    {
    CListView::OnInitialUpdate(); CListCtrl& ListCtrl = GetListCtrl();
    ListCtrl.DeleteAllItems();
    vector<string> &FileList = ((CAXPUnpackDoc*)GetDocument())->m_AxpFile.m_FileList;
    vector<string>::size_type i, len;
    len = FileList.size();
    for (i = 0; i < len; i++)
    {
    ListCtrl.InsertItem(i, CString(FileList[i].c_str()));
    }}#ifdef _DEBUG
    void CAXPUnpackView::AssertValid() const
    {
    CListView::AssertValid();
    }void CAXPUnpackView::Dump(CDumpContext& dc) const
    {
    CListView::Dump(dc);
    }CAXPUnpackDoc* CAXPUnpackView::GetDocument() 
    {
    ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CAXPUnpackDoc)));
    return (CAXPUnpackDoc*)m_pDocument;
    }
    #endif int CAXPUnpackView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {
    if (CListView::OnCreate(lpCreateStruct) == -1)
    return -1;

    CListCtrl& ListCtrl = GetListCtrl();

    CRect rect;
    GetClientRect(rect);
    ListCtrl.ModifyStyle(0, LVS_REPORT | LVS_NOSORTHEADER | LVS_SINGLESEL);
    ListView_SetExtendedListViewStyle(ListCtrl.m_hWnd, LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
    ListCtrl.InsertColumn(0, TEXT("文件名"), LVCFMT_LEFT, rect.Width() / 5 * 3);
    ListCtrl.InsertColumn(1, TEXT("大小"), LVCFMT_LEFT, rect.Width() / 5);
    ListCtrl.InsertColumn(2, TEXT("属性"), LVCFMT_LEFT, rect.Width() / 5);

    m_PopupMenu.CreatePopupMenu();
    m_PopupMenu.AppendMenu(MF_STRING, IDM_ITEM0, TEXT("提取文件"));
    return 0;
    }void CAXPUnpackView::OnSize(UINT nType, int cx, int cy) 
    {
    CListView::OnSize(nType, cx, cy);

    CListCtrl& ListCtrl = GetListCtrl();

    ListCtrl.SetColumnWidth(0,  cx / 5 * 3);
    ListCtrl.SetColumnWidth(1,  cx / 5);
    ListCtrl.SetColumnWidth(2,  cx / 5);
    }void CAXPUnpackView::OnRButtonDown(UINT nFlags, CPoint point) 
    {

    CListView::OnRButtonDown(nFlags, point);
    if (GetListCtrl().GetSelectedCount() != 0)
    {
    CRect rect;
    GetWindowRect(&rect); 
    m_PopupMenu.TrackPopupMenu(TPM_LEFTALIGN, point.x + rect.left, point.y + rect.top, this, NULL);
    }
    }void CAXPUnpackView::OnPopupMenu(UINT nID)
    {
    switch (nID)
    {
    case IDM_ITEM0:
    {
    TCHAR szFilter[] = TEXT("All Files (*.*)|*.*|");
    CListCtrl &ListCtrl = GetListCtrl();
    POSITION pos = ListCtrl.GetFirstSelectedItemPosition();
    if (pos != NULL)
    {
    int nItem = ListCtrl.GetNextSelectedItem(pos);
    CString strFileName = ListCtrl.GetItemText(nItem, 0);
    if (strFileName.ReverseFind('/') != -1)
    {
    strFileName = strFileName.Mid(strFileName.ReverseFind('/') + 1);
    }
    CFileDialog dlg(FALSE, NULL, strFileName, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,\
    szFilter, NULL);
    if (dlg.DoModal() == IDOK)
    {
    strFileName = dlg.GetPathName();
    if (((CAXPUnpackDoc*)GetDocument())->m_AxpFile.GenerateFile(nItem,\
    strFileName))
    {
    CString strMsg;
    strMsg.Format(TEXT("文件提取成功,保存位置[%s]!"), strFileName);
    AfxMessageBox(strMsg);
    }
    }
    }
    }
    break;
    default:
    break;
    }
    }
      

  5.   

    那么多头文件……估计转头文件定义都够呛……更不用说cpp了
      

  6.   

    #include "stdafx.h"
    #include "AXPUnpack.h"#include "MainFrm.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endifIMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
    ON_WM_CREATE()
    END_MESSAGE_MAP()static UINT indicators[] =
    {
    ID_SEPARATOR,           
    ID_INDICATOR_CAPS,
    ID_INDICATOR_NUM,
    ID_INDICATOR_SCRL,
    };CMainFrame::CMainFrame()
    {
    }CMainFrame::~CMainFrame()
    {
    }int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
    return -1;

    if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
    | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
    !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
    {
    TRACE0("Failed to create toolbar\n");
    return -1;      
    } if (!m_wndStatusBar.Create(this) ||
    !m_wndStatusBar.SetIndicators(indicators,
      sizeof(indicators)/sizeof(UINT)))
    {
    TRACE0("Failed to create status bar\n");
    return -1;      
    } m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndToolBar); return 0;
    }BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
    {
    if( !CFrameWnd::PreCreateWindow(cs) )
    return FALSE; return TRUE;
    }
    #ifdef _DEBUG
    void CMainFrame::AssertValid() const
    {
    CFrameWnd::AssertValid();
    }void CMainFrame::Dump(CDumpContext& dc) const
    {
    CFrameWnd::Dump(dc);
    }#endif #if !defined(AFX_AXPFILE_H__1F63FE1D_32CD_4A16_A98F_9566B985CD2C__INCLUDED_)
    #define AFX_AXPFILE_H__1F63FE1D_32CD_4A16_A98F_9566B985CD2C__INCLUDED_#if _MSC_VER > 1000
    #pragma once
    #endif 
    #include <vector>
    #include <string>
    using namespace std;
    const DWORD AXP_SIGNATURE = 0x4B505841;class CAXPFile  
    {
    typedef struct _AXPHeader
    {
    int signature;
    int nUnknow0;
    int nUnknow1;
    int nHashTableOffset;
    int nIndexTableOffset;
    int nFileCount;
    int nSizeOfIndexTable;
    int nDataOffset;
    int nUnknow3;
    int nUnknow4;
    }AXPHeader;

    typedef struct _AXPHashTable
    {
    DWORD nHashA;
    DWORD nHashB;
    DWORD bExists;
    }AXPHashTable;

    typedef struct _AXPFileInfo
    {
    int nFileOffset;
    int nFileSize;
    int nFileFlag;
    }AXPFileInfo;public:
    BOOL GetHashTablePos(const char *lpszString, int *lpFileOffset, int *lpFileSize);
    DWORD HashString(const char *lpszFileName, DWORD dwCryptIndex);
    void SetFileName(LPCTSTR lpFileName);
    void UnLoad();
    BOOL LoadFile();
    BOOL GenerateFile(int i, CString &strFileName);
    CAXPFile();
    virtual ~CAXPFile();

    private:
    DWORD m_CryptTable[0x500];
    private:
    AXPHeader *m_lpAxPHeader;
    AXPHashTable **m_lpAxpHashTable;
    AXPFileInfo **m_lpAxpFileInfo; CString m_FileName;
    HANDLE m_hFile;
    HANDLE m_hFileMap;
    LPVOID m_hMapView;
    DWORD m_dwFileSize;
    public:
        vector<string>  m_FileList;
    protected:
    BOOL GetFileList();
    void Release();
    void ShowErrorMessage();
    BOOL MappingFile();
    void PrepareCryptTable();
    };#endif #if !defined(AFX_AXPUNPACK_H__150FF2EA_953E_40DA_861B_874073DD01EF__INCLUDED_)
    #define AFX_AXPUNPACK_H__150FF2EA_953E_40DA_861B_874073DD01EF__INCLUDED_#if _MSC_VER > 1000
    #pragma once
    #endif #ifndef __AFXWIN_H__
    #error include 'stdafx.h' before including this file for PCH
    #endif#include "resource.h"       
    class CAXPUnpackApp : public CWinApp
    {
    public:
    CAXPUnpackApp(); public:
    virtual BOOL InitInstance(); afx_msg void OnAppAbout(); DECLARE_MESSAGE_MAP()
    };#endif #if !defined(AFX_AXPUNPACKDOC_H__0B402988_415B_4A6C_B62A_0E3E3CFC1A12__INCLUDED_)
    #define AFX_AXPUNPACKDOC_H__0B402988_415B_4A6C_B62A_0E3E3CFC1A12__INCLUDED_#include "AXPFile.h"
    #if _MSC_VER > 1000
    #pragma once
    #endif 
    class CAXPUnpackDoc : public CDocument
    {
    protected: 
    CAXPUnpackDoc();
    DECLARE_DYNCREATE(CAXPUnpackDoc)public:public:
    public:
    virtual BOOL OnNewDocument();
    virtual void Serialize(CArchive& ar);
    virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);public:
    CAXPFile m_AxpFile;
    virtual ~CAXPUnpackDoc();
    #ifdef _DEBUG
    virtual void AssertValid() const;
    virtual void Dump(CDumpContext& dc) const;
    #endifprotected:protected: DECLARE_MESSAGE_MAP()
    };#endif #if !defined(AFX_AXPUNPACKVIEW_H__8224D71F_1634_4C3E_BDF8_08ED89948627__INCLUDED_)
    #define AFX_AXPUNPACKVIEW_H__8224D71F_1634_4C3E_BDF8_08ED89948627__INCLUDED_#if _MSC_VER > 1000
    #pragma once
    #endif 
    #define IDM_ITEM0 3000class CAXPUnpackView : public CListView
    {
    protected: 
    CAXPUnpackView();
    DECLARE_DYNCREATE(CAXPUnpackView)public:
    CAXPUnpackDoc* GetDocument();public: public:
    virtual void OnDraw(CDC* pDC);  
    virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
    protected:
    virtual void OnInitialUpdate(); public:
    virtual ~CAXPUnpackView();
    #ifdef _DEBUG
    virtual void AssertValid() const;
    virtual void Dump(CDumpContext& dc) const;
    #endifprotected:protected:
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    afx_msg void OnSize(UINT nType, int cx, int cy);
    afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
    afx_msg void OnPopupMenu(UINT nID);
    DECLARE_MESSAGE_MAP()
    private:
    CMenu m_PopupMenu;
    };#ifndef _DEBUG  
    inline CAXPUnpackDoc* CAXPUnpackView::GetDocument()
       { return (CAXPUnpackDoc*)m_pDocument; }
    #endif#endif #if !defined(AFX_MAINFRM_H__2819CE0B_DAEB_4B57_A956_EA00564DE3C6__INCLUDED_)
    #define AFX_MAINFRM_H__2819CE0B_DAEB_4B57_A956_EA00564DE3C6__INCLUDED_#if _MSC_VER > 1000
    #pragma once
    #endif class CMainFrame : public CFrameWnd
    {

    protected: 
    CMainFrame();
    DECLARE_DYNCREATE(CMainFrame)public:public: virtual BOOL PreCreateWindow(CREATESTRUCT& cs);public:
    virtual ~CMainFrame();
    #ifdef _DEBUG
    virtual void AssertValid() const;
    virtual void Dump(CDumpContext& dc) const;
    #endifprotected:  
    CStatusBar  m_wndStatusBar;
    CToolBar    m_wndToolBar;protected:
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    DECLARE_MESSAGE_MAP()
    };#endif 所有代码都发上去了  就这三个
      

  7.   

    还不如照着这个功能写个delphi的不就完了?
    其实主要部分在那堆加密算法那
    转成delphi,指针就得写半死
      

  8.   

    写成DLL,然后由DELPHI调用,这种方式最好