Как найти (и удалить) MFC-зависимый код в проекте?

У меня есть огромный устаревший проект, который использует MFC и COM. Идея состоит в том, чтобы перенести его в Linux (Winelib не работает для этого), мне нужно определить части кода, которые используют MFC. Странно то, что решение содержит два проекта DLL, которые наследуются от CWinApp и создают его. Кроме того, я не вижу цели CWinApp в этих DLL, потому что реальный код GUI находится в отдельном не-dll проекте.

Два вопроса:
1. Есть ли какой-нибудь инструмент, который может помочь мне найти конкретный код MFC, чтобы я мог удалить его? Уже видел параметр Qt .
2. Почему CWinApp создается (как показано ниже) в проекте DLL, который вообще не выполняет работу с графическим интерфейсом? Используется ли для передачи сообщений? Я не вижу такого синтаксиса, хотя. Удаление экземпляра CWinApp приводит к тому, что указатель другого проекта не инициализируется. Weird!

Один из кодов проекта DLL выглядит следующим образом:

#include "stdafx.h"
#include "resource.h"
#include <initguid.h>
#include "dlldatax.h"
//removed some project-specific includes for posting on SO

#ifdef _MERGE_PROXYSTUB
extern "C" HINSTANCE hProxyDll;
#endif

CComModule _Module;

BEGIN_OBJECT_MAP(ObjectMap)
OBJECT_ENTRY(CLSID_MyManager, CMyManager)
//removed some other similar lines as the line above
END_OBJECT_MAP()

// Component Category Helper Functions
static HRESULT CreateComponentCategory( CATID catid, WCHAR* catDescription );
static HRESULT UnRegisterCategory( CATID catid );

class CMyClassWrapperApp : public CWinApp
{
public:
    public:
    virtual BOOL InitInstance();
    virtual int ExitInstance();
    DECLARE_MESSAGE_MAP()
};

BEGIN_MESSAGE_MAP(CMyClassWrapperApp, CWinApp)
END_MESSAGE_MAP()

CMyClassWrapperApp theApp;

BOOL CMyClassWrapperApp::InitInstance()
{
#ifdef _MERGE_PROXYSTUB
    hProxyDll = m_hInstance;
#endif
    _Module.Init(ObjectMap, m_hInstance, &LIBID_MyClassWrapperLib);
    return CWinApp::InitInstance();
}

int CMyClassWrapperApp::ExitInstance()
{
    _Module.Term();
    return CWinApp::ExitInstance();
}
4 голоса | спросил Nav 4 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 04 Sep 2012 15:38:55 +0400 2012, 15:38:55

1 ответ


0
  1. В настройках проекта MFC измените на Use of MFC на Использовать Стандартные библиотеки Windows . Затем удалите все, включая 'afx' из вашего StdAfx.h. Ошибки компиляции приведут вас к все детали, специфичные для MFC!
  2. CWinApp позволяет вашему исполняемому файлу MFC правильно использовать любой код MFC в вашей DLL. Фреймворк инициализирует вашу DLL через этот объект. Для не-MFC DLL вы просто должны использовать DllMain.

Что касается COM и без MFC, я бы начал с поиска в Google: atl com codeproject

ответил l33t 17 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 17 Sep 2012 14:50:02 +0400 2012, 14:50:02

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132